php - 如何在 docker 上运行 3 层应用程序,使用 vagrant 在 3 个不同的 centos 上运行,
问题描述
我正在研究 Vagrant,并尝试创建 3 层 Web 应用程序,我使用相同的 vagrant 文件在 Vagrant 上安装了 3 个 Centos。
每个 Centos 有 docker,1 个 centos 有数据库,2 个 centos 有 php apache 服务器,3 个 centos 有 php apache 和客户端代码来显示结果。
这三个都是同步的并且工作正常,但是当我为第一个 MYSQL 数据库创建 docker 容器时,我能够在同一个虚拟机上本地连接它,但无法通过第二个虚拟机与 apache 和 PHP 连接。
谁能帮我?
我还必须在 Docker compose 上测试这个 3 层网络应用程序。
我该怎么做?我必须在不同的 VM 上运行所有 3 个吗?
解决方案
在您所描述的此配置中,大多数配置与您在没有 Docker 的情况下设置的配置相同。(这并没有错!)确保:
对于每个容器化服务,运行它时可以
-p
选择从 Docker 空间中发布一些端口;例如,您运行的 MySQL 服务docker run -p 3306:3306 ... mysql:5.7
.要在服务之间进行连接,请连接到托管服务的 VM 的 IP 地址和发布的端口号(
-p
选项后的第一个数字)。(像Consul这样的服务发现系统可以帮助记住哪个服务在哪个 VM 上。)
您不能在此设置中使用 Docker Compose,因为它可能是记录每个单独服务的启动选项的更方便的方式。
如果使用 Docker Compose 或其他 Docker 原生工具对您很重要,那么您最多只能在一个 VM 上运行它。(如果您有 Linux 主机,则根本不需要 VM;MacOS 和某些 Windows 设置具有可以很好地隐藏 VM 的桌面应用程序。)由于 Docker 容器与 VM 有一些相似之处(例如隔离的文件系统) 更多面向开发人员的设置倾向于完全避免使用 VM,并且似乎不经常涉及 Vagrant。您在此处描述的是一个非常好的部署架构,但它是您使用 Docker 作为实现细节的 Packer/Ansible 堆栈设置的东西,而不是首先使用 Docker 的东西。
推荐阅读
- scala - 无法将数组放入接受可变参数的函数参数中
- r - ggpairs中的部分cor(pcor.test)
- java - 使用 mockito 在另一个方法中模拟一个方法。基本上想模拟methodA来测试statusMethod
- javascript - 在 antd 表中的行选择中,复选框未签入反应
- elasticsearch - 使用elasticsearch重新索引的问题
- android-studio - 单击按钮后将计数器保存到共享首选项,但不保存
- ios - 如何创建一个可以在按下的特定单词上产生音频的字符串
- amazon-cloudformation - terraform 从 vpc 端点子网选项卡获取子网集成 ip
- c# - ElasticSearch 在 ASP.Net C# 中使用 Nest 7.2.1 添加条件子搜索
- java - 升级 Java 后,由于不再找到 Java,我在 jruby 中的测试不再有效