首先确保已经正确安装docker,并且可以联网。。。
本人是 mac环境,其他环境可能略有差异。。。
1.nginx容器
docker search nginxdocker pull nginxdocker run -it --name nginx -v /Users/xxx/www:/data -p 80:80 nginx /bin/bash
1)拉取docker官方的nginx镜像;
2)从刚拉取的nginx镜像 run一个新容器 ;指定容器名 nginx ,挂载本地目录/Users/xxx/www到容器中的/data,映射80端口到主机的80端口;
跑起来后,如果没有意外 在主机上访问 http://127.0.0.1/ 就可以看到 “Welcome to nginx!”了。。。
2.php容器
docker run -it --name php-fpm -v /Users/xxx/www:/data -p 9000:9000 php:7.1.8-fpm /bin/bash
这里 可以不用先拉取镜像,docker检查本地不存在所请求的镜像会自动去docker-hub 拉取;
其次,这里使用了php:7.1.8-fpm 冒号后面是镜像版本,默认是latest,这里不用latest 原因是里面貌似没有fpm,具体版本号可以参考网站,也可以使用其他镜像。。。
3.配置 nginx和fpm
1)fpm
找到php-fpm的配置文件 www.conf ,将 listen = xxxxxxxxxxx 改为 :
listen = 0.0.0.0:9000
或
listen = 127.0.0.1:9000
都可以,然后运行命令 php-fpm (或者 全路径;或者 service php-fpm start ;或者 php-fpm start 等等。。。)
在/var/www 新建一个php文件,写好测试代码;
2)nginx
编辑nginx 虚拟目录配置文件 :
vi /etc/nginx/conf.d/default.conf(容器默认没有vi,可通过 apt-get update; apt-get install vim; 安装编辑器)
location ~ \.php$ { root /var/www; fastcgi_pass 172.17.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
root 的值很重要,这里要填php容器中php项目所在目录 而不是nginx容器中的路径;以前nginx和PHP装在一台“机器”时不存在这个问题,现在分离部署一定要注意。(顺便多说一点,fastcgi_param 参数配置的是nginx请求php-fpm时需要带过去的参数,SCRIPT_FILENAME 表示fpm要执行的PHP文件的路径,而 $document_root的值 就是前面的 root 参数的值,所以root当然要配置成php容器中的php路径。。。)
fastcgi_pass 这里的ip地址可以使用php容器的ip(我的是172.17.0.4),但是容器的ip可能会在容器重启后发生变化,所以这里使用容器的网关(172.17.0.1)。这里说几种查看容器 ip 的方法:
1.从宿主机查看
$ docker inspect --format '{
{ .NetworkSettings }}' 容器id2.容器中查看
a. ifconfig 这个应该很熟,只是容器一般默认没有安装:apt-get install -y net-tools
b. ip addr
配置好后 重启nginx,访问测试php文件,没有意外就看到你想看到的东西了。。。
还有一种是通过 --link 参数在容器之间建立连接,个人感觉 端口映射更灵活。。。