使用Docker快速搭建PHP开发环境

网友投稿 303 2022-10-20

使用Docker快速搭建PHP开发环境

一般我们会把nginx、php都安装在同一个容器,为了扩展方便,我们希望nginx容器和php容器分开。那么就可以使用docker link命令实现这一目的。

需要的镜像:

nginx 1.12.2php(含php-fpm7.1) 7.1

这里nginx镜像选择​​daocloud.io/library/nginx:1.12.2-alpine​​​,php镜像自行编译(选用的是 ​​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​​​来自 ​​|-- |---yphp​​

​​/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的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容器的80-90:80-90​​。或者多个​​-p​​参数。

6、​​-v​​参数指定的本地挂载目录(示例里的​​/work​​)子目录(例如​​/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 --privileged --name yphp56 --env COLUMNS=`tput cols` --env LINES=`tput lines` -p 9000:9000 -p 9400-9499:9400-9499 \ -v /work/:/work/ \ -v "/work/yphp/php/etc56/":/usr/local/php/etc/ \ php56-fpm-centos68-withext docker run -d --restart=always --privileged --name yphp --env COLUMNS=`tput cols` --env LINES=`tput lines` -p 9001:9000 -p 9500-9600:9500-9600 \ -v /work/:/work/ \ -v /work/:/alidata/ \ -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)后访问重启nginx容器 docker restart some-nginx # 重启nginx容器里的nginx服务 docker exec some-nginx nginx -s reload​​

参考

1、docker容器连接问题:nginx 和 php-fpm --link后并无法正常解析php程序,求解

2、在docker 上使用alpine linux建立简易静态网站

3、Docker多容器连接-以Nginx+PHP为例 - 程序猿成长计划

4、Nginx调用远程php-fpm - 指间&流年

5、基于boot2docker部署Docker环境 - 飞鸿影

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:RestTemplate在Spring或非Spring环境下使用精讲
下一篇:解决使用Dockerfile来build镜像时pip install遇到的BUG
相关文章

 发表评论

暂时没有评论,来抢沙发吧~