Docker Compose 相对于 Docker Swarm 和 Docker Stack 有哪些优势?

12
根据我所了解的,Docker-Compose是一个在单个主机上创建多个容器的工具,而Docker Swarm是一个可以在多个主机上进行更多控制,并借助Docker Stack实现相同操作的工具。我完成了教程并阅读了这个帖子:docker-compose.yml vs docker-stack.yml what difference?,得出了结论,即在使用Docker Swarm和Docker Stack时没有必要再使用Docker-Compose。它们甚至可以使用相同的docker-compose.yml。看起来Docker-Compose比Swarm和Stack先出现,新的Swarm + Stack解决方案可能使Compose过时,但由于遗留原因,它仍然存在。我的想法正确吗?如果不是,Docker-Compose相对于使用开发或生产环境而言有哪些优点呢?

如果你正在使用不止“玩具”或示例容器,那么你会发现Compose比Stack更轻量级(启动时间更快),并且需要更少的内存。当然,它也是一个单独的安装程序,我认为它是基于Python的。尽可能地,我会选择Stack - 它是内置的,可能会得到更好的支持和更新的功能。 - JoeG
2个回答

10
“Docker-compose”似乎是在Swarm和Stack之前推出的,而Swarm + Stack的新解决方案可能会使Compose变得过时,但出于历史原因,它仍然存在。这种想法正确吗?
简而言之,是的。Compose是在所有Swarm东西之前推出的(最初是一个名为“fig”的第三方实用程序)。更糟糕的是,甚至还有两个不同的Swarm,旧版Swarm(一个单独的工具)和Swarm Mode(现在已内置到“docker”二进制文件中)。
它似乎正在演变为构建到Docker中的服务和部署概念。但我猜Docker Compose和Swarm Mode部署内容将并存一段时间。
值得知道的是,Docker Compose的基础是一个名为“libcompose”的库https://github.com/docker/libcompose,其他第三方实用程序利用它来支持“docker-compose.yml”文件格式进行部署(例如Rancher和“rancher-compose”)。我想他们会努力继续支持libcompose。
我不确定Docker Swarm部署是否实际使用了libcompose。在我的初步搜索中,似乎Swarm Mode没有实现libcompose而是采用了自己的方式。我不确定这与Docker Compose和libcompose的未来有何关系。请根据自己的理解进行解释...

目前docker stack deploy -c还不支持一些关键字,特别是build,因此您需要预先构建镜像。而且,即使只是本地节点,docker stack deploy也需要一个Swarm才能进行部署。尽管如此,使用compose文件语法的docker stack deploy -c几乎支持所有功能,并支持deploy关键字。 - Mano Marks

3
从我找到的信息来看:Docker Swarm、Docker Compose 和 Docker Networks 有何区别? Docker Compose 是一种客户端工具,允许您运行具有多个组件的应用程序堆栈。

因此,在我们的场景中,您将使用 Docker Compose 来实现 - #2*¹。您将定义一个规范文件,在其中为每个组件 - db、app 和 web 层 - 定义如何构建容器。您还可以指定它们之间的交互方式、每个组件的实例数量以及其他许多内容。

*¹ 现在,您需要启动一个具有 Web 层、App 层和 DB 层的应用程序堆栈。


Compose 是一种用于定义和运行多容器 Docker 应用程序的工具。

Docker Swarm 是一种服务器端功能,使您能够:
  • 群集是作为启动多个容器的底层资源的 docker 节点(机器)的集合。您可以在群集上编排和部署服务。

    您可以将多个节点组合成一个集群,然后将“docker run”命令发送到该集群(实际上是发送到 Swarm 管理器节点)。Swarm 将处理在其中一个节点上调度(启动)此容器。

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

请参阅官方文档:Swarm 模式概述Docker Compose

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接