• Docker实践笔记6:PHP容器制作


    容器介绍

    此容器包含 PHP 7.3 和Nginx1.18环境,用户可以自己使用Makefile 一键编译安装PHP环境,也可以直接使用制作好的镜像运行项目

    容器源码下载

    git clone https://github.com/CiaraLi/dockerFiles.git
    
    
    • 1
    • 2

    文件目录

    进入php7.3 可看到如下结构

    ├── Dockerfile //构建容器的DockerFIle
    └── src
        ├── nginx //nginx配置文件
        │ ├── default.conf        
        │ ├── nginx.conf          
        │ └── start.sh //nginx启动命令
        ├── nginx-1.18.0.tar.gz //Nginx 源码安装包
        ├── php //PHP配置文件
        │ ├── php-fpm.conf      
        │ ├── php.ini               
        │ └── www.conf           
        ├── php-7.3.5.tar.gz //PHP 源码安装包
        ├── php_install.sh //安装脚本
        ├── phpredis-4.0.2.tar.gz //PHPREDIS 安装包
        └── www-data //PHP脚本目录
            └── index.php 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    容器配置

    • 安装脚本
      编辑php_install.sh 可以自定义安装目录及源码版本。
      默认适配版本是php7.3 和php7.4 ,更改为更高级的版本可能需要微调脚本内容。
      也可以更改脚本自定义添加PHP模块
      源码包可以提前下载至src目录
    #!/bin/bash 
    homeDir="/tmp"   
    php="php-7.3.5"
    phpDir="/usr/local/php"   
    nginx="nginx-1.18.0"  
    nginxDir="/usr/local/nginx"    
    phpredis="phpredis-4.0.2"   
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • nginx配置
      nginx 启动用户www-data 和www-data,更改用户或用户组需要更改php_install.sh脚本。
      nginx/start.sh 是容器启动命令,Nignx 记得要添加daemon off;
    #!/bin/bash
    php-fpm
    nginx -g "daemon off;"
    
    • 1
    • 2
    • 3
    • PHP配置
      PHP启动用户www-data 和www-data ,更改用户或用户组需要更改php_install.sh脚本。

    构建自己的容器

    进入php7.3目录

    配置

    • 编辑DockFile
      镜像源使用centos7,不支持更改
      MAINTAINER可以设置自己的邮箱
      TZ 是默认时区
    FROM centos:7
    USER root
    LABEL MAINTAINER=""
    COPY src/ /tmp/
    ## isntall nginx by source code 
    WORKDIR /tmp
    
    ENV TZ=Asia/Shanghai
    RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
     systemd-tmpfiles-setup.service ] || rm -f $i; done); \
     rm -f /lib/systemd/system/multi-user.target.wants/*;\
     rm -f /etc/systemd/system/*.wants/*;\
     rm -f /lib/systemd/system/local-fs.target.wants/*; \
     rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
     rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
     rm -f /lib/systemd/system/basic.target.wants/*;\
     rm -f /lib/systemd/system/anaconda.target.wants/*;\
     echo "--HELLO PHP7.3--" > /etc/motd ; \
     echo "set encoding=utf-8" > ~/.vimrc; \
     ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone ;\
     chmod +x php_install.sh && ./php_install.sh  
      
    EXPOSE 80 443
    VOLUME ["/home/www-data","/usr/local/nginx/conf/include"]
    CMD ["/bin/sh","/start.sh" ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    构建

    • 使用build命令构建镜像
      -t php7:指定镜像名称
    cd php7.3
    docker build -t php7 ./  
    
    
    • 1
    • 2
    • 3
    • 安装过程看到如下信息,则构建成功
    Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
    
    
    • 1
    • 2
    • 查看构建的镜像
    TALdeMacBook-Pro1:php7.3 tal$ docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    php7 latest b25b01f69449 6 minutes ago 556MB
    
    • 1
    • 2
    • 3

    运行容器

    • 准备容器运行的挂载目录
      目录结构如下。
    ├── config //项目Nginx配置
    │ └── host.conf
    └── www-data // 项目根目录
        └── hello.php
    
    • 1
    • 2
    • 3
    • 4
    • 编辑default.conf
      可以自定义容器的 PHP脚本目录、项目域名、日志目录、端口号
    ## API ##
    server {
        listen 80;
     
        root /home/www-data/;  
        index index.php; 
    
        server_name 127.0.0.1 localhost;
    
        charset utf-8;
        access_log /home/www_logs/test_access.log combined;
        error_log /home/www_logs/test_error.log error;
      
        location / {
            try_files $uri $uri/ /index.php?$args;
        }
    
        client_max_body_size 50m;
    
        location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_pass php-fpm;
            fastcgi_index index.php;
            include fastcgi_params;
        }
    
    }  
      
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 运行容器
      做目录挂载和端口映射
      1.Nginx配置挂载目录 :本机路径/config:/usr/local/nginx/conf/include
      2.PHP脚本挂载目录 :本机路径/www-data:/home/www-data/
      3.端口隐射 目前默认端口为80 443 用户可以自行更改Nginx配置
    docker run -itd -v /Users/php/config:/usr/local/nginx/conf/include -v /Users/php/www-data/:/home/www-data/ -p 80:80 --name php7 php7
    
    235525a5bc962aa6e5b36cba093c7e59b3213445bdd9e182ee5d1bce5c26d4dc
    
    
    • 1
    • 2
    • 3
    • 4
    • 查看运行的容器
    TALdeMacBook-Pro1:php7.3 tal$ docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    235525a5bc96 php7 "/bin/sh /start.sh '…" 3 minutes ago Up 3 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp php7
    
    • 1
    • 2
    • 3

    上传至镜像仓库

    创建tag

    • 创建镜像标签
    docker tag php7  iongdoc/php7.3:v1.0
    
    TALdeMacBook-Pro1:php7.3 tal$ docker images
    
    REPOSITORY       TAG       IMAGE ID       CREATED          SIZE
    
    iongdoc/php7.3    v1.0    b25b01f69449   57 minutes ago   556MB
    
    php7             latest    b25b01f69449   57 minutes ago   556MB
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 推送镜像,下次可以直接使用
      如需要更改环境,重新按之前的步骤构建一遍
    TALdeMacBook-Pro1:php7.3 tal$ docker push iongdoc/php7.3:v1.0
    
    Using default tag: latest
    
    The push refers to repository [docker.io/iongdoc/php7]
    
    c6e1c6b2fcc9: Pushed
    
    5f70bf18a086: Mounted from iongdoc/php7.3:v1.0
    
    d8d88d72c7ab: Pushed
    
    174f56854903: Mounted from iongdoc/php7.3:v1.0
    
    latest: digest: sha256:657cf8fd994fd809ac5901d44c4d9a8c119fd7c436f5d68a4859c0a67c604fc7 size: 1157
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    使用制作好的镜像

    • 直接下载制作好的镜像iongdoc/php7.3:v1.0
    TALdeMacBook-Pro1:php7.3 tal$ docker pull iongdoc/php7.3:v1.0
    
    v1.0: Pulling from iongdoc/php7.3
    
    Digest: sha256:63f9b5b7127d4f88a700897b8cb7ffcb8645796d7d66757dd7b905c6f1a3aa2b
    
    Status: Image is up to date for iongdoc/php7.3:v1.0
    
    docker.io/iongdoc/php7.3:v1.0
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    Milvus Cloud——Agent 框架工作方式
    Project Office X for Mac项目管理工具
    通过bat脚本控制Oracle服务启动停止
    蓝桥杯算法 一.
    利用Dockerfile创建指定镜像
    【云原生】实战案列
    Java的几大常用类
    一招搞定,终止端口号进程
    客快物流大数据项目(八十七):ClickHouse的使用案例
    C++ -- 学习系列 std::array 容器
  • 原文地址:https://blog.csdn.net/iong_l/article/details/126118957