当前位置: 首页 > news >正文

docker容器互联 分离部署PHP 和 nginx(端口映射方式)

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

首先确保已经正确安装docker,并且可以联网。。。

本人是 mac环境,其他环境可能略有差异。。。

 

1.nginx容器

docker search nginx
docker pull nginx
docker run -it --name nginx -v /Users/xxx/www:/data -p 80:80 nginx /bin/bash

1)拉取docker官方的nginx镜像;

2)从刚拉取的nginx镜像 run一个新容器 ;指定容器名 nginx ,挂载本地目录/Users/xxx/www到容器中的/data,映射80端口到主机的80端口;

跑起来后,如果没有意外 在主机上访问 http://127.0.0.1/ 就可以看到 “Welcome to nginx!”了。。。

 

2.php容器

docker run -it --name php-fpm -v /Users/xxx/www:/data -p 9000:9000 php:7.1.8-fpm /bin/bash

这里 可以不用先拉取镜像,docker检查本地不存在所请求的镜像会自动去docker-hub 拉取;

其次,这里使用了php:7.1.8-fpm 冒号后面是镜像版本,默认是latest,这里不用latest 原因是里面貌似没有fpm,具体版本号可以参考docker-hub网站,也可以使用其他镜像。。。

 

3.配置 nginx和fpm

1)fpm

找到php-fpm的配置文件 www.conf ,将 listen = xxxxxxxxxxx 改为 :

listen = 0.0.0.0:9000

listen = 127.0.0.1:9000

都可以,然后运行命令 php-fpm (或者 全路径;或者 service php-fpm start ;或者 php-fpm start 等等。。。)

在/var/www 新建一个php文件,写好测试代码;

 

2)nginx

编辑nginx 虚拟目录配置文件 :

vi /etc/nginx/conf.d/default.conf(容器默认没有vi,可通过 apt-get update; apt-get install vim; 安装编辑器)

location ~ \.php$ {
        root           /var/www;
        fastcgi_pass   172.17.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

root 的值很重要,这里要填php容器中php项目所在目录 而不是nginx容器中的路径;以前nginx和PHP装在一台“机器”时不存在这个问题,现在分离部署一定要注意。(顺便多说一点,fastcgi_param 参数配置的是nginx请求php-fpm时需要带过去的参数,SCRIPT_FILENAME 表示fpm要执行的PHP文件的路径,而 $document_root的值 就是前面的 root 参数的值,所以root当然要配置成php容器中的php路径。。。)

fastcgi_pass 这里的ip地址可以使用php容器的ip(我的是172.17.0.4),但是容器的ip可能会在容器重启后发生变化,所以这里使用容器的网关(172.17.0.1)。这里说几种查看容器 ip 的方法:

1.从宿主机查看

 $ docker inspect --format '{{ .NetworkSettings }}'  容器id

2.容器中查看

    a. ifconfig  这个应该很熟,只是容器一般默认没有安装:apt-get install -y net-tools

    b. ip addr

配置好后 重启nginx,访问测试php文件,没有意外就看到你想看到的东西了。。。

 

还有一种是通过 --link 参数在容器之间建立连接,个人感觉 端口映射更灵活。。。

转载于:https://my.oschina.net/u/2399303/blog/1511539

相关文章:

  • mongoose post方法总结and疑点
  • 算法导论笔记——第十二~十四章 数据结构(二)树
  • 招Java工程师一名
  • React Native商城项目实战10 - 个人中心中间内容设置
  • shell中的并且、和、或者
  • 时间控件-pikaday.js
  • POJ 1328 Radar Installation贪心算法
  • 分享我的第一次Selenium自动化测试框架开发过程
  • Android 透明度对照表
  • git命令
  • 高级查询
  • Scott Guthrie访谈:定制仪表板与Azure Monitor
  • 打包新版本上传到AppStore时报错 ERROR ITMS-90034:
  • Eclipse导入项目:No projects are found to import
  • SLF4J - 借助SLF4J, 统一适配所有日志实现为logback日志实现的实践
  • 2019年如何成为全栈工程师?
  • Centos6.8 使用rpm安装mysql5.7
  • in typeof instanceof ===这些运算符有什么作用
  • JavaScript 基础知识 - 入门篇(一)
  • JS字符串转数字方法总结
  • mongo索引构建
  • Tornado学习笔记(1)
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 力扣(LeetCode)56
  • 树莓派 - 使用须知
  • 白色的风信子
  • Java性能优化之JVM GC(垃圾回收机制)
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • # 数据结构
  • (02)Hive SQL编译成MapReduce任务的过程
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (2)nginx 安装、启停
  • (5)STL算法之复制
  • (70min)字节暑假实习二面(已挂)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (万字长文)Spring的核心知识尽揽其中
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)iOS字体
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)四层和七层负载均衡的区别
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • //解决validator验证插件多个name相同只验证第一的问题
  • [ vulhub漏洞复现篇 ] ECShop 2.x / 3.x SQL注入/远程执行代码漏洞 xianzhi-2017-02-82239600
  • [Android] 修改设备访问权限
  • [CareerCup] 6.1 Find Heavy Bottle 寻找重瓶子
  • [CSS]中子元素在父元素中居中
  • [DevEpxress]GridControl 显示Gif动画