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

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

需要的镜像:

  • 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-withextphp71-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

原文地址:https://www.cnblogs.com/52fhy/p/8468791.html

时间: 2024-08-27 00:15:19

使用Docker link快速搭建PHP开发环境的相关文章

Linux下快速搭建php开发环境

php开发环境快速搭建 一.Linux下快速搭建php开发环境 1.安装XAMPP for Linux XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建站集成软件包,使用XAMPP可快速搭建PHP开发环境.下载链接:https://www.apachefriends.org/download.html  进入下载界面选择XAMPP for Linux下载 启动终端输入命令  cd /下载xampp保存的路径.我的保存路径是:/home/coderose/下载.更改安装程

快速搭建PHP开发环境(PhpStorm+EasyPHP)

写在开头,何为PHP(拍黄片)? P HP是一种开源的通用计算机脚本语言,尤其适用于网络开发并可嵌入HTML中使用(维基百科). 从上我们得出,何为PHP? 1.开源脚本语言. 2.用于网络开发可嵌入HTML使用. 优点:请自行百度(地址:http://baike.baidu.cn/view/99.htm) IDE选择:Eclipse,记事本,PhpStorm,Visual Studio等. 搭建开发环境 之 工具选择 工欲善其事,必先利其器.选择合适的开发工具,能极大的减少学习成本和提高学习和

快速搭建Python开发环境

快速搭建Python开发环境·Python入门学习速成系列<1> 当我们在学习一门新的技术或者新的编程语言时,经常感觉无从下手.学习初期往往不知道事先应该准备什么:或者刚开始准备,在安装问题就栽了一个大跟头:甚至我们准备完成后,开始学习是,才发现事先应该准备安装的软件没有到位等.这样或那样的问题就困扰我们学习之初,花费了大量的时间. 本文主要介绍在Windows和Linux主流操作系统上快速部署Python开发环境. 准备Python开发环境 在准备部署Python开发环境时,往往会选择不同的

CentOS 7快速搭建Nodejs开发环境

Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好.学习Nodejs首先需要会安装环境.这里我介绍如何在CentOS7快速搭建Nodejs开发环境. 工具/原料 CentOS 7 Nodejs 通过NVM安装 1 NVM(Node version manager)顾名思义,就是Node.js的版本管理软件,可以轻松的在Node.js各个版本间切换,项目源码在GitHub: 如果你想长期做 node

快速搭建Android 开发环境-使用ADT Bundle

一.搭建Android开发环境 近日要学Android开发基础,就着手搭建Windows下的Android开发环境. 找了一些相关的博文参考,基本上都是要分别下载和安装JDK, Eclipse, AndroidSDK, ADT 后来发现Android sdk下载官方地址,提供一个ADT Bundle下载. 而这个ADT Bundle,已经包含了AndroidSDK, ADT以及一个配置好的Eclipse. 因此,搭建Android开发环境,只需要两个步骤: 1.下载JDK并安装, 官方地址 ht

IDEA如何快速搭建Java开发环境,IntelliJ IDEA mac新手入门

作为IntelliJ IDEA mac新手,IDEA如何快速搭建Java开发环境呢?今天小编就给大家带来了IntelliJ IDEA mac使用教程,想知道IDEA如何快速搭建Java开发环境? 全局JDK(默认配置) 具体步骤:顶部工具栏 File ->Other Settins -> Default Project Structure -> SDKs -> JDK 示例: 根据下图步骤设置JDK目录,最后点击OK保存. 注:SDKs全称是Software Development

利用vagrant快速搭建rails开发环境

前言 当我们学习一门新的语言或技术的时候,最麻烦或比较浪费时间的事情就是搭建开发环境.而搭建开发环境与我们将要学习的新的语言或技术,没有太大的联系,因为我们感兴趣的只是新的语言或技术本身,而并非它们的开发环境.如果浪费太多的时间在这些上面,则更是不值得事情.如果能有一套现成的搭建好的开发环境,这样我们就可以直接关注我们所感兴趣的东西了.如在写某方面教程的时候,如果能配有一个现成的开发环境,这样初学者就可以快速的上手,掌握核心的知识,聚焦重点内容. 本文主要介绍如何利用vagrant快速的搭建ra

linux(ubuntu)和windows下面快速搭建android开发环境

在windows和linux下面搭建android开发环境,一般要安装以下几个软件: 1.JDK安装 2.Eclipse安装 3.Android SDK安装 4.在eclipse里面安装ADT 5.eclipse汉化包 相对来说,这些软件的安装相对比较的简单,但是Android SDK的下载速度一般相当的慢,而且google的这些网站一般都不能访问,所以比较麻烦. 我在配置环境的过程当中,有一种相对来说比较简单的方法可以直接跳过这些繁杂的工作,很简单的搭建环境.环境的搭建方法如下: 1.安装JD

在win10下使用docker快速搭建ruby开发环境

docker在windows下发力的时候必将取代各种虚拟机,并改变程序员的开发习惯,或许还会改变infra的工作. 概要: 在Windows下搭建开发环境一直是infra(我)头疼的事情.为了解决这个问题,跟老板,程序员商量得出的解决办法有以下几种:1.Mac下开发.优点是搭建环境方便,缺点是需要熟悉mac操作.2.Linux下开发.优点也是搭建环境方便,缺点是需要熟悉linux操作.而且UI比Mac难看. 为了方便日常交流,最后变成使用win系统,VNC到linux下开发.还有一种是开虚拟机,