0
点赞
收藏
分享

微信扫一扫

Dockerfile 构建php7.3镜像(含supervisor进程守护)

飞鸟不急 2021-09-26 阅读 48

1.准备工作

  • 创建Dockerfile文件
  • 当前目录下创建配置文件
目录文件结构
|-- config
    |-- php
    |   |-- php-fpm.conf  #进程服务的配置文件
    |   |-- php.ini #运行核心配置文件
    |   |-- www.conf #进程服务的扩展配置文件
    |-- supervisord
    |   |-- supervisord.conf #进程服务的配置文件,需手动修改部分参数
    |   |-- php-worker.ini #php守护进程
|-- Dockerfile

2.目录下各个文件配置

supervisord.conf 需要改动的地方
[supervisord]
nodaemon=true     #nodaemon必须设置成true,docker会将CMD中的第一个前台进程作为pid=1的进程
php-worker.ini
[program:php-worker]
process_name=%(program_name)s_%(process_num)02d
command=/opt/remi/php73/root/usr/sbin/php-fpm --nodaemonize
autostart=true
autorestart=true
redirect_stderr=true
priority=10 #进程启动优先级,默认999,值小的优先启动
php-fpm.conf 需要改动的地方
[supervisord]
listen = 0.0.0.0:9000     #修改本机访问为所有ip访问

;listen.allowed_clients = 127.0.0.1 #需禁用此项 ,在前面加";",允许所有ip访问
Dockerfile
FROM centos:7
MAINTAINER eason_fly
ENV TZ=Asia/Shanghai

RUN yum -y install epel-release --nogpgcheck && \
    yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm && \
    yum -y install git && yum -y install supervisor && \
    yum install -y php73 php73-php-fpm php73-php-cli php73-php-bcmath php73-php-gd php73-php-json php73-php-mbstring php73-php-mcrypt php73-php-mysqlnd php73-php-opcache php73-php-pdo php73-php-pecl-crypto php73-php-xml php73-php-pecl-redis5 php73-php-pecl-mongodb php73-php-pecl-zip && \
    cp /usr/bin/php73 /usr/bin/php && \
    ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && \
    echo '$TZ' > /etc/timezone && \
    php -r "readfile('https://getcomposer.org/installer');" | php && \
    mv composer.phar /usr/local/bin/composer && yum clean all

COPY config/php/php.ini /etc/opt/remi/php73/php.ini
COPY config/php/php-fpm.conf /etc/opt/remi/php73/php-fpm.conf
COPY config/php/www.conf /etc/opt/remi/php73/php-fpm.d/www.conf
COPY config/supervisor/supervisord.conf /etc/supervisord.conf
COPY config/supervisor/php-worker.ini /etc/supervisord.d/php-worker.ini

WORKDIR /var/www/html
EXPOSE 9000
CMD ["/usr/bin/supervisord","-c","/etc/supervisord.conf"]

3.构建镜像

执行命令

docker build -t fly/php-fpm:7.3 .

构建成功

Removing intermediate container adf1f8fec081
 ---> 1ff256606f91
Step 12/12 : CMD ["/usr/bin/supervisord", "-c", "/etc/supervisord.conf"]
 ---> Running in abcf9bdcf867
Removing intermediate container abcf9bdcf867
 ---> f06c038cd419
Successfully built f06c038cd419
Successfully tagged fly/php-fpm:7.3

查看镜像

Mac:php73 mac$ docker images
REPOSITORY       TAG                IMAGE ID       CREATED         SIZE
fly/php-fpm      7.3                b4a0f8bbd738   45 hours ago    411MB

4.通过镜像创建容器

  • docker命令启动
Mac:php73 mac$ docker run -it -d --name php_73 fly/php-fpm:7.3
e01f6e3e9eaf1ec3aa5ccc851163c5c3422b7fb1be851c42efcad58da7bb6feb
  • docker-compose启动
version: '3'

services:
  php_73:
   container_name: php_73
   image: fly/php-fpm:7.3
   restart: always
   expose:
      - "9000"
   volumes:
      - ./:/var/www/html
  nginx_php:
   container_name: nginx_php
   image: nginx
   restart: always
   ports:
      - "8090:80"
   volumes:
      - ./:/var/www/html
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./nginx/log:/var/log/nginx
   depends_on:
      - php_73
   links:
      - php_73

5.进入容器,查看进程是否启动

Mac:php73 mac$ docker exec -it php_73 bash
[root@e01f6e3e9eaf /]# ps -ef|grep php
root        10     1  0 12:40 ?        00:00:00 php-fpm: master process (/etc/opt/remi/php73/php-fpm.conf)
apache      11    10  0 12:40 ?        00:00:00 php-fpm: pool www
apache      12    10  0 12:40 ?        00:00:00 php-fpm: pool www
apache      13    10  0 12:40 ?        00:00:00 php-fpm: pool www
apache      14    10  0 12:40 ?        00:00:00 php-fpm: pool www
apache      15    10  0 12:40 ?        00:00:00 php-fpm: pool www
apache      41    10  0 13:36 ?        00:00:00 php-fpm: pool www
[root@5fcbff4e4a1b html]# ps -ef|grep sup
root         1     0  0 12:40 ?        00:00:00 /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.conf

6.需要注意的点

  • docker会将CMD中的第一个前台进程作为pid=1的进程,第一个进程必须是前台启动的,所以supervisord.conf配置文件中,nodaemon必须设置为true
  • supervisor只能监控到前台运行的进程,若设为后台运行后则无法监控到进程状态而导致守护进程功能失效,所以supervisord.conf中配置PHP进程时,必须设置PHP以前台模式运行command=/opt/remi/php73/root/usr/sbin/php-fpm --nodaemonize
举报

相关推荐

0 条评论