【问题标题】:What benefits does Docker Compose have over Docker Swarm and Docker Stack?与 Docker Swarm 和 Docker Stack 相比,Docker Compose 有哪些优势?
【发布时间】:2018-08-01 19:18:12
【问题描述】:

从我读到的内容看来,Docker-Compose 是一个在单个主机上创建多个容器的工具,而 Docker Swarm 是一个可以做完全相同的事情但在 Docker 的帮助下可以在多个主机上进行更多控制的工具堆。我浏览了教程,也遇到了这个线程:

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 在开发或生产环境方面比 Docker Swarm 和 Docker Stack 有什么优势?

【问题讨论】:

  • 如果您使用的不仅仅是“玩具”或样本容器,那么您会发现 compose 重量更轻(启动时间更快)并且比 Stack 需要更少的内存。当然,它也是一个单独的安装,我相信它是基于 python 的。只要有可能,我都会使用 Stack - 它是内置的,可能会获得更好的支持和更新的功能。

标签: docker docker-compose docker-swarm linux-containers


【解决方案1】:

似乎 Docker-compose 出现在 swarm 和 stack 之前,也许 swarm + stack 的新解决方案使 compose 过时了,但由于遗留原因,它仍然存在。这种想法正确吗?

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

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

知道 Docker Compose 基础作为一个名为 libcompose (https://github.com/docker/libcompose) 的库也是有益的,其他 3rd 方实用程序利用它来支持 docker-compose.yml 文件格式进行部署(请参阅 Rancher 和 @987654326 @ 举个例子)。我想他们会努力继续支持libcompose

我不清楚 Docker Swarm 部署的东西是否真的使用libcompose。在我粗略的搜索中,似乎 Swarm 模式确实没有实现 libcompose 并且做了自己的事情。我不确定这与 Docker Compose 和 libcompose 的未来有何关系。随心所欲地解释......

【讨论】:

  • docker stack deploy -c 中尚不支持一些键,尤其是build,因此您必须预先构建图像。并且docker stack deploy 需要部署一个 Swarm,即使它只是本地节点。也就是说,docker stack deploy -c 使用 compose 文件语法几乎支持所有内容,还支持 deploy 键。
【解决方案2】:

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

Docker Compose 是一个客户端工具,可让您运行包含多个组件的应用程序堆栈。

因此,在我们的场景中,您将使用 Docker Compose 来实现 - #2*¹。您将定义一个规范文件,您将在其中定义如何为每个组件(数据库、应用程序和 Web 层)构建容器。您还可以指定它们之间的交互方式。每件事有多少个实例。

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


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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-29
    • 2018-04-01
    • 1970-01-01
    相关资源
    最近更新 更多