本篇是使用Docker安装PHP运行环境的命令笔记。这里PHP版本为7.0+。主要是手动运行php+fpm+apache步骤、使用compose编排php+fpm+apache 和nginx+PHP-FPM环境搭建过程简述。
运行PHP程序
拉取7.2版本的官方PHP镜像 docker pull php:7.2-cli
运行刚才的镜像 –rm 运行完自己干掉自己,一般用于执行临时任务
1 | docker run -it --rm --name runphp -v /home/xugz/php:/usr/src/myphp php:7.2-cli \ |
手动运行php+fpm+apache
我们尽可能的使用基于alpine的镜像。
安装FPM镜像 docker pull php:7.2.0-fpm-alpine3.6
,使用命令docker run -d --rm --name fpm php:7.2.0-fpm-alpine3.6
让容器以后台守护模式运行
安装Apache镜像 docker pull httpd:2.4-alpine
,写一个测试HTML网页,使用命令 docker run -d -p 80:80 --rm --name myweb -v /home/xugz/php:/usr/local/apache2/htdocs/ httpd:2.4-alpine
映射80端口挂载默认网站路径,尝试是否正常使用。一般来说应该是可使用的。
然后我们需要修改配置文件。我们可以自己准备配置,或者从容器中拷贝一个。根据文档,容器里默认的配置文件路径为/usr/local/apache2/conf/httpd.conf。
使用 docker exec -it myweb cat /usr/local/apache2/conf/httpd.conf
查看配置文件信息
使用 docker cp myweb:/usr/local/apache2/conf/httpd.conf /home/xugz/conf/
复制文件
修改配置文件 vi /home/xugz/conf/httpd.conf
找到以下内容,把前面的#号去掉开启对应模块
1 | LoadModule proxy_module modules/mod_proxy.so |
另需增加修改配置如下内容
1 | <VirtualHost *:80> |
启动fpm的时候把php文件夹挂载到fpm容器中,因此fpm容器的启动要增加文件挂载,命令改成docker run -d --rm --name fpm -v /home/xugz/php:/php php:7.2.0-fpm-alpine3.6
重新运行apache容器
1 | docker run -d -p 80:80 --name myweb -v /home/xugz/php:/usr/local/apache2/htdocs/ \ |
没有异常的话,可用 curl localhost
和 curl localhost/index.php
测试。
compose编排php+fpm+apache
为了让我们容器的启动和删除操作方便,所以要我们要使用docker compose ,一款编排工具。
下载安装步骤见本站其他篇,点我瞬时移动。新建目录webcompose目录,在目录中新建docker-compose.yml文件,拷贝如下内容(就是将上文中两条启动容器命令翻译成dockerfile)
1 | version: "3" |
然后可以使用 docker-compose up -d
启动可用 curl localhost
和 curl localhost/index.php
测试。
搭建nginx+PHP-FPM环境
使用命令 docker pull nginx:1.13.9-alpine
安装Nginx
默认的网页文件夹是 /usr/share/nginx/html
默认的配置文件地址是/etc/nginx/nginx.conf
如果我们没有现成的配置文件,那么可以先胡乱启动下容器,然后拷贝到 我们的文件夹中。如下
1 | docker run --name nginx --rm -d nginx:1.13.9-alpine |
普通html的情况下,nginx不需要做任何配置,使用如下命令重新运行后,尝试普通HTML访问是否正常
1 | docker run --name nginx -d --rm -v /home/xugz/php:/usr/share/nginx/html \ |
nginx+FPM的配置
nginx配置文件的内容参考
1 | user nginx; |
启动FPM和Nginx
1 | docker network create --driver=bridge --subnet=192.138.0.0/16 mynginx |
当然可以使用compose进行编排,很简单这里不就赘述了,不要忘记同步修改Apache和Nginx配置文件中的fpm部分,统一改成fpm的IP。
nginx 官方镜像