Docker运行多版本php环境

先拉镜像不解释

docker pull nginx

docker pull php:7.2.9-fpm

docker pull php:7.0-fpm

 

先启php

运行php 7.0 容器

docker run -d  --name php70 \
-v /home/kiwidev/devspace/docker/www70:/var/www70 \
-p 9001:9000  \
php:7.0-fpm

再一个(7.2.9)

docker run -d  --name php729 \
-v /home/kiwidev/devspace/docker/www729:/var/www729 \
-p 9003:9000  \
php:7.2.9-fpm

解释:

-v /home/kiwidev/devspace/docker/www729:/var/www729 , 讲本地目录挂载到容器的/var/www729 目录,这个地方nginx配置会用到

fastcgi_param SCRIPT_FILENAME /var/www729$fastcgi_script_name;

 

再启nginx

docker run -d -p 8090:80  --name ngx-ccc  \
-v /root/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /root/nginx/logs:/var/log/nginx \
-v /home/kiwidev/devspace/docker/www70:/var/www70 \
-v /home/kiwidev/devspace/docker/www72:/var/www729 \
--link php70:fpm-php70 \
--link php729:fpm-php729 \
nginx

解释,下面2项 -v 挂载,测试中发现是nginx 的root配置的根目录;

–link  容器name/ID:别名,ngx配置文件会用到

 

ngx配置文件,在/root/nginx/conf/conf.d 中新建xx.conf

server {
    listen 80;
    server_name php729.docker.com;

    location / {
        #root   /usr/share/nginx/html;
        root    /var/www729;
        index  index.html index.htm index.php;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

     location ~ \.php$ {
        #fastcgi_pass   php:9000;
        fastcgi_pass   fpm-php729:9000;   #上面ngx容器 --link 容器name的别名
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www729$fastcgi_script_name;  #目测是php容器的根目录
        include        fastcgi_params;
    }

}

在复制一个上面的配置,fastcgi_pass 给到fpm-php70:9000 就行了,还是注意下 SCRIPT_FILENAME 根目录,与php70容器对应就OK了

 

其他问题:

修改配置文件重启ngx容器(docker restart ngx-ccc 应该也可以)

docker exec -ti ngx-ccc /bin/base
root@11asdfasdf # service ngixn reload

查看容器启动log

docker logs ngx-ccc

查看容器配置

grep Links -A 5  /  grep Mounts -A 20

docker inspect ngx-ccc

启动,停止,删除容器

docker start/stop/restart/rm   docker_name/id