2

我对 docker 很陌生,我需要一些关于分发我的应用程序的帮助。

考虑一下:

  • 我有一个物理机池,每台都运行最新版本的 docker。

  • 我的“应用程序 A”有几个容器。为了在此定义中明确,应用程序将是在一个容器、4 个消息传递容器和一个主容器中运行的数据库。所有 6 个容器都需要相互通信。数据库、消息传递等容器将是“服务”。

  • 我还可以拥有“应用程序 B”、“应用程序 C”和“应用程序 N...”,它们的大小和配置与“应用程序 A”略有不同。应用程序之间不相互通信并且完全独立。

要求:

  • 所有应用程序“A,B,C..N”必须使用相同的物理机池。
  • 如果需要,每个应用程序的每个服务都必须在不同的物理机器上运行。
  • 您可能希望限制如何将每个服务分配给每个物理机
  • 我需要“即时”创建应用程序

我的第一个想法是使用 docker-compose 来定义一个应用程序和几个 dockerfile 来定义其中的服务。但如果我这样做,每个应用程序都将在同一个 docker 引擎中运行,因此在同一个物理机器上运行。

我已经读到您可以将 docker compose 部署到 docker swarm 中。在这种情况下,docker swarm 将充当 docker 引擎。但是,我找不到任何关于如何做到这一点的例子,而且我不确定这些限制。

我的第二个想法是使用群模式。我会创建一个集群,并在其上运行服务。但是,我会失去“应用程序”的概念。群中会有一堆服务,我无法管理它们之间的通信方式。

所以,鉴于这个问题:

  • 有什么假设或陈述我错了吗?
  • 场景中推荐的 docker 工具用法是什么?
4

1 回答 1

3

可以将 Docker Compose 与 Docker Swarm Mode (Docker 1.12) 一起使用,但目前并不完全兼容。看看Docker 堆栈和捆绑包

在 Docker 的下一个版本(1.13)中,还会有 Docker Compose v3 的新版本,它将在没有 Docker Compose 的情况下与 Docker 兼容。这将使您可以像这样部署 Docker Compose 文件: docker deploy --compose-file docker-compose.yml AppA

这目前是实验性的,但在 Docker 1-13-rc5 上工作得很好。(码头工人发布

可以在这篇文章中找到对此的更详细解释。

为了让它们都在不同的主机上运行,​​这可以通过在 docker service create(或 Docker Compose v3)中定义约束来实现(请参阅Docker Service Create - Constraints)。但是为什么你需要让它们在不同的主机上运行呢?

可以通过 --limit-cpu 和 --limit-memory 限制每个服务能够使用的 CPU 和内存使用量。

如果你想玩 Docker Swarm Mode,你可以在本地主机上使用 Docker Machine 创建一个 swarm。(注意不要使用旧的 Docker Swarm)

于 2017-01-13T09:15:09.630 回答