前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[实战]多容器,Nginx容器灵活切换PHP版本!同时运行多个PHP容器

[实战]多容器,Nginx容器灵活切换PHP版本!同时运行多个PHP容器

作者头像
宣言言言
发布2019-12-15 21:51:14
2.1K0
发布2019-12-15 21:51:14
举报
文章被收录于专栏:宣言(Siam)博客宣言(Siam)博客

容器link原理

===========

在前面一章中,我们使用 --link来将php容器和nginx容器关联在一起,并在nginx容器中的配置写下了如下代码,写下的php001就是我们在–link中设置的别名,其实这是通过本地host实现的。

代码语言:javascript
复制
{
    try_files $uri =404;
    fastcgi_pass php001:9000;   #极其重要
    fastcgi_index index.php;
    include /etc/nginx/conf.d/fastcgi_params;  #这里也是需要注意的,之前就是在这里还惨我了,需要绝对路径。不然路径默认从nginx的配置目录开始。
}

我们进入容器,并运行

代码语言:javascript
复制
$ cd /etc/
$ vim hosts

便可以看到设置的本地host。

实现灵活切换php版本

我们先拉取两个不同版本的php镜像

代码语言:javascript
复制
$ docker pull php:7.0-fpm
$ docker pull php:7.2-fpm

然后开启两个容器

代码语言:javascript
复制
$ docker run --name php70 -v /home/wwwroot/service_config/php_config:/usr/local/php/etc -v /home/wwwroot/:/home/wwwroot/ -d php:7.0-fpm

$ docker run --name php72 -v /home/wwwroot/service_config/php_config:/usr/local/php/etc -v /home/wwwroot/:/home/wwwroot/ -d php:7.2-fpm

注意挂载目录不需要同我的命令一致 自己修改

因为默认都是9000端口 所以不能同时运行 ,创建完一个先stop 创建第二个。需要同时运行的看下面的步骤↓↓↓

运行需要的php版本容器 运行容器后查看容器的ip

$ docker inspect php70

查找以下行 “IPAddress”: “172.17.0.2”,

如果要在nginx使用别名去访问  则需要把hosts文件挂载出来 

因为修改了nginx配置需要重启机器,手动修改是没用的。!

接着开启nginx容器,然后进入nginx容器,在nginx的配置文件里修改,(我已经挂载在主机本地目录,详细看前一章节)

代码语言:javascript
复制
{
    try_files $uri =404;
    fastcgi_pass 172.17.0.2:9000这里修改了;
    fastcgi_index index.php;
    include /etc/nginx/conf.d/fastcgi_params;
}

Esc 然后:wq 保存退出重启即可  

$ docker restart nginx001

切换成7.2的步骤:

代码语言:javascript
复制
$ docker stop php70
$ docker start php72
$ docker inspect php72

得到容器运行ip,进入nginx 修改配置 (因为两个容器不是同时运行,当70版本的容器结束,再开启72版本的容器 还是同一个ip 所以不需要修改配置)

假设ip更换了 则需要修改配置然后重启机器

同时运行多个PHP容器

在开启容器的时候需要使用不同的外网ip,因为php-fpm默认监听的是9000端口 所以运行的命令就成了这样子

代码语言:javascript
复制
$ docker run -p 9001:9000 --name php70 -v /home/wwwroot/service_config/php_config:/usr/local/php/etc -v /home/wwwroot/:/home/wwwroot/ -d php:7.0-fpm

$ docker run -p 9002:9000 --name php72 -v /home/wwwroot/service_config/php_config:/usr/local/php/etc -v /home/wwwroot/:/home/wwwroot/ -d php:7.2-fpm

这里的9001和9002是你的宿主机没有被占用的端口即可

可以看到两个php容器已经同时可以运行了  $ docker ps 

在nginx.conf配置中使用对应容器的ip:9000即可使用对应的PHP版本去编译。

记得修改完IP需要重启nginx!

容器端口号和主机端口号关系的理解

===================

Docker的所有容器都相当于在同一个内网的很多机器

所以每一个容器都有一个ip   每个机器都有自己的端口使用情况   所以不同容器可以使用一样的端口 ,所以我们两个容器都使用php-fpm默认的9000端口并没有冲突。

但是每一个容器都需要映射一个端口到主机上,这个端口是在主机上的,所以不能重复, 我们使用9001和9002。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.08.30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实现灵活切换php版本
  • 同时运行多个PHP容器
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档