1 准备
1.已安装好docker
2.已在docker中安装好nginx,docker安装nginx可参考我另一篇文章:docker安装nginx并配置SSL
2 docker安装php并启动
因为我之前没用过php,查了一些教程,不少用5.6的,怕踩坑,也用5.6的,不过现在发现用新版本的也没啥问题
docker pull php:5.6-fpm
然后启动php,用-v把本地/data/php(记得创建文件夹)映射到容器的/www目录中
docker run -itd --name myphp -v /data/php:/www -m 55m php:5.6-fpm
或者下面这个更好(加了--restart=always挂掉了会自动重启)
docker run -itd --name myphp -v /data/php:/www --restart=always -m 55m php:5.6-fpm
3 配置nginx
经过查教程,踩了些坑后,摸索出下面两种方式,推荐方式二
3.1 方式一
首先查php容器在docker的内网地址
注意,是docker自己有的一套容器的内网地址,不是自己服务器的内网地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' myphp
看到返回的ip,记录下来,我的是172.17.0.6,然后打开自己的nginx配置文件,在server中加入下面内容
location ~ \.php$ {
fastcgi_pass 172.17.0.6:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /www/$fastcgi_script_name;
include fastcgi_params;
}
相关说明:
fastcgi_pass 填写自己php的ip和端口,php端口默认是9000
fastcgi_param 填写php脚本地址,nginx匹配到.php结尾的请求后,会转发到php服务器中,因为前面我们docker启动php时配置了/www目录,所以这里也需要配置/www目录,这样php服务器才能够找到相应的php文件
(可自行配置其它目录,docker启动php指定目录和此处nginx配置的目录相同即可 )
最后启动nginx容器即可(我配置了ssl,所以多挂载了一个放置证书的目录,可自行取掉)
docker run -itd --name nginx -p 80:80 -p 443:443 -v /data/nginx/conf.d/nginxl.conf:/etc/nginx/conf.d/nginx.conf -v /data/nginx/conf.d/cert:/etc/nginx/conf.d -v -m 100m nginx
3.2 方式二
打开自己的nginx配置文件,在server中加入下面内容
location ~ \.php$ {
#root /www;
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /www/$fastcgi_script_name;
include fastcgi_params;
}
和上面不同的是,这里的fastcgi_pass配置了php:9000
然后启动nginx容器
docker run -itd --name nginx -p 80:80 -p 443:443 -v /data/nginx/conf.d/nginx.conf:/etc/nginx/conf.d/nginx.conf -v /data/nginx/conf.d/cert:/etc/nginx/conf.d -v --link myphp:php -m 100m nginx
和上面不同的是,多了 --link myphp:php 这个参数
这个可以把前面启动的名为myphp的容器的网络映射为php供nginx容器使用,所以nginx的配置中,fastcgi_pass就能够写成php:9000,docker会自动拿到php服务器的内网ip填充到php:9000中
这种方式更灵活,不需要哪天rm了php-fpm了又得重新去查它的内网ip了
4 使用
建一个test.php脚本文件,里面写
<?php phpinfo(); ?>
保存,放到/data/php中,然后浏览器访问
ip:port/test.php 或者
域名/test.php 试试看吧~