1.準(zhǔn)備工作
- 創(chuàng)建Dockerfile文件
- 當(dāng)前目錄下創(chuàng)建配置文件
目錄文件結(jié)構(gòu)
|-- config
|-- php
| |-- php-fpm.conf #進(jìn)程服務(wù)的配置文件
| |-- php.ini #運(yùn)行核心配置文件
| |-- www.conf #進(jìn)程服務(wù)的擴(kuò)展配置文件
|-- supervisord
| |-- supervisord.conf #進(jìn)程服務(wù)的配置文件,需手動修改部分參數(shù)
| |-- php-worker.ini #php守護(hù)進(jìn)程
|-- Dockerfile
2.目錄下各個文件配置
supervisord.conf 需要改動的地方
[supervisord]
nodaemon=true #nodaemon必須設(shè)置成true,docker會將CMD中的第一個前臺進(jìn)程作為pid=1的進(jìn)程
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 #進(jìn)程啟動優(yōu)先級,默認(rèn)999锅纺,值小的優(yōu)先啟動
php-fpm.conf 需要改動的地方
[supervisord]
listen = 0.0.0.0:9000 #修改本機(jī)訪問為所有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.構(gòu)建鏡像
執(zhí)行命令
docker build -t fly/php-fpm:7.3 .
構(gòu)建成功
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.通過鏡像創(chuàng)建容器
- 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.進(jìn)入容器,查看進(jìn)程是否啟動
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中的第一個前臺進(jìn)程作為pid=1的進(jìn)程丈莺,第一個進(jìn)程必須是前臺啟動的划煮,所以
supervisord.conf
配置文件中,nodaemon
必須設(shè)置為true
-
supervisor
只能監(jiān)控到前臺運(yùn)行的進(jìn)程,若設(shè)為后臺運(yùn)行后則無法監(jiān)控到進(jìn)程狀態(tài)而導(dǎo)致守護(hù)進(jìn)程功能失效缔俄,所以supervisord.conf
中配置PHP進(jìn)程時弛秋,必須設(shè)置PHP以前臺模式運(yùn)行command=/opt/remi/php73/root/usr/sbin/php-fpm --nodaemonize