我可以在 Docker 容器中运行多个程序吗?

新手上路,请多包涵

我试图从部署一个旨在在桌面用户上运行的应用程序的角度开始围绕 Docker 进行思考。我的应用程序只是一个烧瓶 Web 应用程序和 mongo 数据库。通常我会在虚拟机中安装两者,并将主机端口转发到来宾 Web 应用程序。我想尝试一下 Docker,但我不确定我打算如何使用多个程序。文档说只能有 ENTRYPOINT 所以我怎么能有 Mongo 和我的烧瓶应用程序。或者它们是否需要在单独的容器中,在这种情况下它们如何相互通信以及这如何使分发应用程序变得容易?

原文由 nickponline 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 786
2 个回答

ENTRYPOINT 只能有一个,但该目标通常是一个脚本,它可以启动尽可能多的程序。您还可以使用例如 Supervisord 或类似工具来负责在单个容器内启动多个服务。 这是一个在单个容器中运行 mysql、apache 和 wordpress 的 docker 容器示例

假设您有一个数据库供单个 Web 应用程序使用。那么在单个容器中运行两者可能更容易。

如果您有一个由多个应用程序使用的共享数据库,那么最好在其自己的容器中运行数据库,并在各自的容器中运行应用程序。

当应用程序在不同的容器中运行时,至少有两种可能性可以相互通信:

  1. 使用暴露的 IP 端口并通过它们连接。
  2. 最近的 docker 版本 支持链接

原文由 vesako 发布,翻译遵循 CC BY-SA 3.0 许可协议

我强烈不同意以前的一些解决方案,这些解决方案建议在同一个容器中运行这两种服务。 文档中明确指出不建议这样做

通常建议您通过每个容器使用一项服务来分隔关注区域。该服务可能会分叉成多个进程(例如,Apache Web 服务器启动多个工作进程)。拥有多个进程是可以的,但要从 Docker 中获得最大收益,请避免一个容器负责整个应用程序的多个方面。您可以使用用户定义的网络和共享卷连接多个容器。

supervisord 或类似程序有很好的用例,但运行 Web 应用程序 + 数据库不是其中的一部分。

您绝对应该使用 docker-compose 来执行此操作并编排具有不同职责的多个容器。

原文由 nicolas-van 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题