首页 > 解决方案 > 如何在 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 个吗?

标签: phpmysqldockervagrant

解决方案


在您所描述的此配置中,大多数配置与您在没有 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 的东西。


推荐阅读