我对docker很陌生,我需要一些关于分发我的应用程序的帮助。
考虑一下:
我有一组物理机器,每台机器都运行最新版本的docker。
我的应用程序A"有几个容器。要明确这个定义,应用程序将是一个在容器中运行的数据库,4个消息传递容器和一个主容器。所有6个容器都需要相互通信。数据库,消息传递和其他容器将是" services"。
我还可以拥有"应用程序B","应用程序C"和#34;应用程序N ...",其大小和配置与应用程序A"略有不同。应用程序之间不进行通信,并且完全独立。
要求:
我的第一个想法是使用docker-compose来定义应用程序和几个dockerfiles来定义其中的服务。但是,如果我这样做,每个应用程序将运行在相同的docker引擎中,因此,相同的物理机器。
我已经读过你可以将docker compose部署到docker swarm中。在这种情况下,docker swarm将充当docker引擎。但是,我找不到任何关于如何做到这一点的例子,我不确定这些限制。
我的第二个想法是使用群模式。我会创建一个swarm,并在其上运行服务。但是,我会失去" application"的概念。群集中会有一堆服务,我无法管理每个服务如何相互通信。
所以,考虑到这个问题:
答案 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)