我正在研究 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 空间之外;例如,您将使用docker run -p 3306:3306 ... mysql:5.7
运行的 MySQL 服务。要在服务之间进行连接,请连接到托管服务的 VM 的 IP 地址和已发布的端口号(
-p
选项后的第一个数字)。 (像 Consul 这样的服务发现系统可以帮助记住哪个服务在哪个虚拟机上。)
您不能在此设置中使用 Docker Compose,除了它可能是记录每个单独服务的启动选项的更方便的方式。
如果使用 Docker Compose 或其他 Docker 原生工具对您很重要,则您最多只能在一个 VM 上运行它。 (如果您有 Linux 主机,则根本不需要 VM;MacOS 和某些 Windows 设置具有可以很好地隐藏 VM 的桌面应用程序。)由于 Docker 容器与 VM 有一些相似之处(例如隔离的文件系统) 更多面向开发人员的设置倾向于完全避免 VM,并且似乎不经常涉及 Vagrant。您在这里描述的是一个非常好的部署架构,但它是您使用 Packer/Ansible 堆栈设置的,以 Docker 作为实现细节,而不是首先是 Docker。
关于php - 如何在 docker 上运行 3 层应用程序,使用 vagrant 在 3 个不同的 centos 上运行,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54276099/