Docker Compose 比 Docker Swarm 和 Docker Stack 有什么好处?

What benefits does Docker Compose have over Docker Swarm and Docker Stack?

据我所知,Docker-Compose 是一种在单个主机上创建多个容器的工具,而 DockerSwarm 是一种可以做完全相同的事情但具有更多功能的工具在 Docker Stack 的帮助下控制和在多个主机上。我浏览了教程,也遇到了这个线程:

我得出的结论是,当您可以使用 Docker Swarm 和 Docker Stack 时,没有理由使用 Docker-Compose。他们甚至可以使用相同的 docker-compose.yml.

似乎 Docker-compose 出现在 swarm 和 stack 之前,也许 swarm + stack 的新解决方案使 compose 过时了,但由于遗留原因它仍然存在。这种想法对吗?如果不是,Docker-Compose 在开发或生产环境方面比 Docker Swarm 和 Docker Stack 有什么好处?

It seems that Docker-compose came before the swarm and stack and maybe the new solution of swarm + stack makes compose obsolete, but it still remains for legacy reasons. Is this thinking correct?

简而言之,是的。 Compose 出现在所有 Swarm 之前(它起源于名为 fig 的第 3 方实用程序)。更糟糕的是,甚至有两个不同的 Swarm,旧的 Swarm(那个是一个单独的工具)和 Swarm Mode(现在内置在 docker 二进制文件中)。

它似乎正在演变为内置于 Docker 中的服务和部署概念。但我猜 Docker Compose 和 Swarm Mode 部署的东西会并存一段时间。

知道 Docker Compose 基础作为一个名为 libcompose (https://github.com/docker/libcompose) 的库存在也是有益的,其他第 3 方实用程序利用它来支持 docker-compose.yml 用于部署的文件格式(参见 Rancher 和 rancher-compose 作为示例)。我想他们会努力继续支持 libcompose.

我不清楚 Docker Swarm 部署的东西是否真的使用 libcompose。在我的粗略搜索中,Swarm 模式似乎 而不是 实现 libcompose 并且做它自己的事情。我不确定这与 Docker Compose 和 libcompose 的未来有何关系。按您认为合适的方式解释...

根据我的发现:What's the difference between Docker Swarm, Docker Compose and Docker Networks?

Docker Compose 是一个客户端工具,允许您运行 具有多个组件的应用程序堆栈。

So in our scenario you would use Docker Compose to achieve - #2*¹. You will define a spec file where you would define how a container has to built for each of your components - db, app and web tier. You can also specify how will those interact with each other. How many instance of each and many other things.

*¹ Now you have a requirement to start an application stack which has web tier, app tier and db tier.


Compose is a tool for defining and running multi-container Docker applications.

Docker Swarm 是一种服务器端功能,可让您:

  • Swarm 是一个 docker 节点(机器)集群,充当启动多个容器的底层资源。可以跨 swarm 编排和部署服务。

    You can combine multiple nodes as a cluster and then send “docker run” command to this cluster (actually to the Swarm manager node) Swarm will handle scheduling(starting) this container on one of the nodes.

  • 允许跨所有节点的容器相互通信

查看官方文档:Swarm mode overview & Docker Compose