在compose / swarm模式下使用Docker

时间:2017-01-04 19:56:39

标签: docker docker-compose docker-swarm docker-swarm-mode

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

考虑一下:

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

  • 我的应用程序A"有几个容器。要明确这个定义,应用程序将是一个在容器中运行的数据库,4个消息传递容器和一个主容器。所有6个容器都需要相互通信。数据库,消息传递和其他容器将是" services"。

  • 我还可以拥有"应用程序B","应用程序C"和#34;应用程序N ...",其大小和配置与应用程序A"略有不同。应用程序之间不进行通信,并且完全独立。

要求:

  • 所有申请" A,B,C..N"必须使用相同的物理机池。
  • 如果需要,每个应用程序的每个服务必须在不同的物理机器上运行。
  • 您可能希望限制每个服务分配给每台物理机的方式
  • 我需要动态创建应用程序"

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

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

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

所以,考虑到这个问题:

  • 我有错误的假设或陈述吗?
  • 方案中推荐的docker工具用法是什么?

1 个答案:

答案 0 :(得分:3)

可以将Docker Compose与Docker Swarm模式(Docker 1.12)一起使用,但它目前与它不完全兼容。看看Docker Stacks and Bundles

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

目前这是实验性的,但Docker 1-13-rc5的效果非常好。 (Docker Releases

可以在此article中找到有关此问题的更详细说明。

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

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

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