使用Docker link快速搭建PHP开发环境
2018-02-25 10:46
926 查看
一般我们会把nginx、php都安装在同一个容器,为了扩展方便,我们希望nginx容器和php容器分开。那么就可以使用docker link命令实现这一目的。
需要的镜像:
nginx 1.12.2
php(含php-fpm7.1) 7.1
这里nginx镜像选择
这里的
运行 nginx :
选用
命令不是很多,但是有很多注意点,必须仔细查看,否则可能导致服务不正常:
1、对于php-fpm容器来说,php-fpm的www.conf配置文件里,监听的IP导致不能是127.0.0.1,必须是0.0.0.0;否则会导致后续nginx这边出现404(查看问题)。
2、nginx容器必须使用
3、nginx容器和php-fpm容器的www目录必须是一致的。
4、nginx容器配置fastcgi_pass的时候需要修改为
5、如果nginx容器需要支持更多端口访问,那么使用
6、
nginx配置:
hello.cc.conf
注意这里的
对于使用了
这里面的
使用
说明正常。
如果本地是Mac或者Linux且安装的是Docker(非ToolBox之类),使用
https://segmentfault.com/q/1010000006148224/a-1020000013359135
2、在docker 上使用alpine linux建立简易静态网站 - CSDN博客
http://blog.csdn.net/becivells/article/details/51599186
3、Docker多容器连接-以Nginx+PHP为例 - 程序猿成长计划 - SegmentFault 思否
https://segmentfault.com/a/1190000002949036
4、Nginx调用远程php-fpm - 指间&流年 - 博客园
https://www.cnblogs.com/feiyafeiblog/p/6938515.html
需要的镜像:
nginx 1.12.2
php(含php-fpm7.1) 7.1
这里nginx镜像选择
daocloud.io/library/nginx:1.12.2-alpine,php镜像自行编译(选用的是 https://github.com/52fhy/docker-images 里的
php56-fpm-centos68-withext和
php71-fpm-centos68-phalcon-withext)。
实践
运行 php-fpm :docker run -d --restart=always --name yphp \ -v /work/:/work/ \ -v "/work/yphp/php/etc/":/usr/local/php/etc/ \ php71-fpm-centos68-phalcon-withext
--restart=always使得容器开机随着docker服务自行启动。
-v指定宿主机和容器的目录映射关系。
这里的
/work/yphp来自 https://github.com/52fhy/yphp 。
/work里面包含的子目录:
/work |-- www |---yphp
/www是项目目录,
yphp是nginx和php配置目录,映射到容器,方便本地修改。
运行 nginx :
docker run -d --restart=always --name some-nginx -p 80:80 --link yphp:yphp \ -v /work/:/work/ \ -v /work/yphp/nginx/conf/:/etc/nginx/ \ -v /work/yphp/nginx/logs/:/etc/nginx/logs/ \ daocloud.io/library/nginx:1.12.2-alpine
选用
nginx:1.12.2-alpine是因为该镜像非常小。
命令不是很多,但是有很多注意点,必须仔细查看,否则可能导致服务不正常:
1、对于php-fpm容器来说,php-fpm的www.conf配置文件里,监听的IP导致不能是127.0.0.1,必须是0.0.0.0;否则会导致后续nginx这边出现404(查看问题)。
;listen = 127.0.0.1:9000 listen = 0.0.0.0:9000
2、nginx容器必须使用
--link连接到php-fpm容器。
3、nginx容器和php-fpm容器的www目录必须是一致的。
4、nginx容器配置fastcgi_pass的时候需要修改为
--link里的名称(实际为主机名称,会在nginx容器的
/etc/hosts新增一条主机记录)。
5、如果nginx容器需要支持更多端口访问,那么使用
-p范围表示,示例:
-p 80-90:80-90。或者多个
-p参数。
6、
-v参数指定的本地挂载目录(示例里的
/work)子目录(例如
/www)在宿主机不能是软链接,否则会导致nginx 404,因为软链接在容器里是无效的。但是
/work本身可以是软链接。
nginx配置:
hello.cc.conf
server { listen 80; server_name hello.cc; access_log logs/access.log; error_log logs/error.log; root /work/yphp/php/; index index.php index.html index.htm; location ~ \.php$ { #fastcgi_pass 127.0.0.1:9000; fastcgi_pass yphp:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
注意这里的
fastcgi_pass已做改动。
运行多个版本PHP
docker run -d --restart=always --name yphp56 -p 9000:9000 \ -v /work/:/work/ \ -v "/work/yphp/php/etc56/":/usr/local/php/etc/ \ php56-fpm-centos68-withext docker run -d --restart=always --name yphp -p 9001:9000 \ -v /work/:/work/ \ -v "/work/yphp/php/etc/":/usr/local/php/etc/ \ php71-fpm-centos68-phalcon-withext docker run -d --restart=always --name some-nginx -p 80-90:80-90 --link yphp56 --link yphp \ -v /work/:/work/ \ -v /work/yphp/nginx/conf/:/etc/nginx/ \ -v /work/yphp/nginx/logs/:/etc/nginx/logs/ \ daocloud.io/library/nginx:1.12.2-alpine
对于使用了
--link的nginx容器来说,php-fpm容器的
-p参数实际没有产生作用,可以省略不写。
这里面的
/work对于宿主机来说都是同一个目录。
使用
docker ps查看状态是否都是
UP:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 221c6ffb19dd daocloud.io/library/nginx:1.12.2-alpine "nginx -g 'daemon of…" 12 minutes ago Up 2 seconds 0.0.0.0:80-90->80-90/tcp some-nginx 02a4f9d804f7 php71-fpm-centos68-phalcon-withext "/run.sh" 24 minutes ago Up 3 seconds 80/tcp, 0.0.0.0:9001->9000/tcp yphp a9decc06558e php56-fpm-centos68-withext "/run.sh" 25 minutes ago Up 3 seconds 80/tcp, 0.0.0.0:9000->9000/tcp yphp56
说明正常。
如果本地是Mac或者Linux且安装的是Docker(非ToolBox之类),使用
127.0.0.1就可以看到nginx已经运行了。添加
127.0.0.1 hello.cc到
/etc/hosts(非Windows)后访问http://hello.cc/可以看到phpinfo信息。试着修改
/work/yphp/nginx/conf/vhost/hello.cc.conf里的
fastcgi_pass端口为9001,然后重启nginx容器或者重启nginx容器里的nginx服务,会发现phpinfo显示的PHP版本变成了PHP7.1。
# 重启nginx容器 docker restart some-nginx # 重启nginx容器里的nginx服务 docker exec some-nginx nginx -s reload
参考
1、docker容器连接问题:nginx 和 php-fpm --link后并无法正常解析php程序,求解https://segmentfault.com/q/1010000006148224/a-1020000013359135
2、在docker 上使用alpine linux建立简易静态网站 - CSDN博客
http://blog.csdn.net/becivells/article/details/51599186
3、Docker多容器连接-以Nginx+PHP为例 - 程序猿成长计划 - SegmentFault 思否
https://segmentfault.com/a/1190000002949036
4、Nginx调用远程php-fpm - 指间&流年 - 博客园
https://www.cnblogs.com/feiyafeiblog/p/6938515.html
相关文章推荐
- 使用 docker-compose.yml 快速搭建php开发环境
- 【docker】使用docker快速搭建nginx+php开发环境
- 使用Docker快速搭建Oracle开发环境的方法教程
- 使用ZendStudio和ZendServer搭建PHP开发环境配置方法
- Window平台使用VS2010简单快速搭建QT开发环境
- 使用ZendStudio和ZendServer搭建PHP开发环境配置方法
- Windows平台下PHP开发环境的快速搭建
- PHP 开发环境的搭建和使用 01--apache服务器配置以及 IIS端口冲突解决
- PHP 开发环境的搭建和使用02--整合让apache处理php
- 1 使用InstantRails快速搭建Ruby On Rails开发环境
- 32讲 PHP开发环境的搭建和使用② 自定义安装
- PHP开发环境的搭建和使用② 自定义安装
- 用ZendServer快速搭建php oracle开发环境
- 33讲 PHP开发环境的搭建和使用③ 安装并配置discuz论坛
- Ruby on rails开发从头来(windows)(一)-使用InstantRails快速搭建Ruby On Rails开发环境
- Ruby on rails开发从头来(windows)(一)-使用InstantRails快速搭建Ruby On Rails开发环境
- 一篇介绍如何使用XAMPP以及PDT开发PHP环境搭建的文章
- 快速搭建PHP开发环境WAMP+ZendStudio+ZendDebugger
- 使用eclipse快速搭建erlang开发环境
- 傻瓜式快速搭建PHP开发环境:介绍几款AMP套装