Docker 在 compose/swarm 模式下的用法

Docker usage in compose/swarm mode

我是 docker 的新手,我需要一些关于分发我的应用程序的帮助。

考虑一下:

要求:

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

我了解到您可以将 docker compose 部署到 docker swarm 中。在这种情况下,docker swarm 将充当 docker 引擎。但是,我找不到任何有关如何执行此操作的示例,而且我不确定这些限制。

我的第二个想法是使用集群模式。我会创建一个群,并在其上提供 运行 服务。但是,我会失去 "application" 的概念。会有一堆服务被扔进群里,我无法管理它们如何相互通信。

所以,鉴于这个问题:

可以使用 Docker Compose 与 Docker Swarm Mode (Docker 1.12),但目前不完全兼容。看看 Docker Stacks and Bundles.

在Docker(1.13)的下一个版本中也会有Docker Compose v3的新版本,它将兼容Docker而不是Docker撰写。这将使您可以像这样部署 Docker Compose 文件: docker 部署 --compose-file docker-compose.yml AppA

这目前是实验性的,但在 Docker 1-13-rc5 上工作得很好。 (Docker Releases)

可以在 article 中找到更详细的解释。

为了满足您将它们全部 运行 放在不同主机上的要求,这可以通过在 docker 服务创建(或 Docker Compose v3)中定义约束来实现(参见Docker Service Create - Constraints)。但是为什么你需要让它们 运行 在不同的主机上?

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

如果您想玩 Docker 群模式,您可以在本地主机上使用 Docker 机器创建一个群。 (注意不要使用旧的Docker Swarm)