最近在学docker,顺便配置了一下docker中的nginx与php,发现网上的关于docker中配置nginx与php的资料不多,并且有的也很旧,没有太多的参考性,因此决定本身写一篇,分享一下其中的经验。php
直接上docker的官网https://www.docker.com下载docker For Mac这个版本,是docker专门为mac系统编写的软件,至关于一个app,下载安装好后,打开docker App,而后在App中启动docker便可。html
启动docker以后,打开命令行,你的命令行里面就有了docker这个命令:nginx
而后我直接使用的是官方的nginx镜像,下载方法:docker
docker pull nginx
等待下载完便可。安全
同理,我也是使用的官方的PHP镜像,其实nginx和php我都推荐官方的镜像,毕竟官方镜像表明着安全和稳定。网络
docker pull php:7.1-fpm
你若是想下载其余的版本,上官方镜像上面去看一下,都有各类版本的说明,想下载什么版本的都有。我这里就用的最新的php版本了。app
安装好nginx以后,便用命令启动它:spa
docker run -p 80:80 --name mynginx -v /Users/Doubleduan/Documents/project:/home -v /Users/Doubleduan/Documents/conf:/etc/nginx/conf.d -d nginx
docker run -p 9000:9000 --name myphp -v /Users/Doubleduan/Documents/project:/home -d php:7.1-fpm
下面贴出个人配置操作系统
server { listen 80; server_name algo.test.com; root /home/algorithm; access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log error; location / { index index.html index.htm index.php; } location ~ \.php$ { fastcgi_pass 172.17.0.3:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
这个algo.test.com我在主机的hosts文件中配置的指向127.0.0.1,其实就是访问的本机80端口。这里要特别注意两个点:命令行
第一点:是fastcgi_pass 172.17.0.3:9000
,这里的172.17.0.3就是php容器的ip,查询容器IP的方法:
docker inspect 容器ID或容器名 |grep '"IPAddress"'
你本身配置的话要替换成你本身的php容器ip,注意不能用127.0.0.1,由于我用的是docker默认的网络链接模式,也就是docker bridge模式,这种模式下你要访问另外一个容器就必须用那个容器的虚拟ip,并且端口也必需要与宿主机的相应端口绑定,由于宿主机是一个网关,nginx容器访问php容器要通过宿主机的网关转发的,因此不绑定端口确定访问不了。
第二点
关于fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name
这个配置,若是你想用$document_root
变量,那就必须把nginx容器的数据目录与php容器的数据目录弄成一致的,好比个人nginx容器的数据目录是/home/algorithm,在php容器中依然是这个,若是php容器中的目录改变了,不是这个了,那么php容器就会找不到请求的这个文件的。由于两个容器至关于两套文件系统,路径有多是不同的。可是呢,若是你偏要设置成不同的,那么只能写死地址了,好比弄成这样:fastcgi_param SCRIPT_FILENAME /home/algorithm/$fastcgi_script_name
,就可让php容器访问到相应的文件了。
弄好配置文件以后,重启nginx容器,就能够访问了。