Docker 在 compose/swarm 模式下的用法
Docker usage in compose/swarm mode
我是 docker 的新手,我需要一些关于分发我的应用程序的帮助。
考虑一下:
我有一组物理机,每台都运行安装了最新版本的docker。
我的 "Application A" 有几个容器。为了在这个定义中明确,一个应用程序将是一个数据库 运行 在一个容器、4 个消息传递容器和一个主容器中。所有 6 个容器都需要相互通信。数据库、消息传递等容器将是 "services".
我也可以有 "Application B"、"Application C" 和 "Application N...",它们在尺寸和配置上与 "Application A" 略有不同。应用程序之间不通信,完全独立。
要求:
- 所有应用程序 "A,B,C..N" 必须使用相同的物理机池。
- 如果需要,每个应用程序的每个服务必须 运行 在不同的物理机器上。
- 您可能希望限制每项服务分配给每台物理机的方式
- 我需要创建应用程序"on the fly"
我的第一个想法是使用 docker-compose 来定义一个应用程序和几个 docker 文件来定义其中的服务。但如果我这样做,每个应用程序都将 运行 在同一个 docker 引擎中,因此,在同一个物理机器中。
我了解到您可以将 docker compose 部署到 docker swarm 中。在这种情况下,docker swarm 将充当 docker 引擎。但是,我找不到任何有关如何执行此操作的示例,而且我不确定这些限制。
我的第二个想法是使用集群模式。我会创建一个群,并在其上提供 运行 服务。但是,我会失去 "application" 的概念。会有一堆服务被扔进群里,我无法管理它们如何相互通信。
所以,鉴于这个问题:
- 我是否有任何错误的假设或陈述?
- 场景中推荐的 docker 工具用法是什么?
可以使用 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)
我是 docker 的新手,我需要一些关于分发我的应用程序的帮助。
考虑一下:
我有一组物理机,每台都运行安装了最新版本的docker。
我的 "Application A" 有几个容器。为了在这个定义中明确,一个应用程序将是一个数据库 运行 在一个容器、4 个消息传递容器和一个主容器中。所有 6 个容器都需要相互通信。数据库、消息传递等容器将是 "services".
我也可以有 "Application B"、"Application C" 和 "Application N...",它们在尺寸和配置上与 "Application A" 略有不同。应用程序之间不通信,完全独立。
要求:
- 所有应用程序 "A,B,C..N" 必须使用相同的物理机池。
- 如果需要,每个应用程序的每个服务必须 运行 在不同的物理机器上。
- 您可能希望限制每项服务分配给每台物理机的方式
- 我需要创建应用程序"on the fly"
我的第一个想法是使用 docker-compose 来定义一个应用程序和几个 docker 文件来定义其中的服务。但如果我这样做,每个应用程序都将 运行 在同一个 docker 引擎中,因此,在同一个物理机器中。
我了解到您可以将 docker compose 部署到 docker swarm 中。在这种情况下,docker swarm 将充当 docker 引擎。但是,我找不到任何有关如何执行此操作的示例,而且我不确定这些限制。
我的第二个想法是使用集群模式。我会创建一个群,并在其上提供 运行 服务。但是,我会失去 "application" 的概念。会有一堆服务被扔进群里,我无法管理它们如何相互通信。
所以,鉴于这个问题:
- 我是否有任何错误的假设或陈述?
- 场景中推荐的 docker 工具用法是什么?
可以使用 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)