docker-compose.yml和docker-stack.yml有什么区别?

21

我是一位新的 Docker 用户。在不同的手册中,我经常会看到用于描述 Docker 作业的 docker-compose.yml 文件,但在 Docker 网站上,为此目的使用的是 docker-stack.yml 文件。这两者有什么区别呢?

3个回答

16

docker-compose.yml是用于docker-compose工具的,该工具用于在单个docker引擎上运行多容器docker应用程序。

它是通过以下方式调用的:

docker-compose up

docker-stack.yml是用于Docker Swarm工具的(用于编排和调度)。

它使用以下命令进行调用:

docker stack

1
好的,Docker Swarm 工具有什么(实际)目标更好的使用方式,我可以进行比较吗? - Oleksii Sytar
官方的Docker介绍使用docker-compose.yml和docker stack,所以我猜这只是一种命名惯例。 - davidA
@meowsqueak 官方的docker-compose文档使用docker-compose,你可以在这里看到 https://docs.docker.com/compose/overview/,页面顶部的第3点:1.创建Dockerfile,2.创建docker-compose.yml,3.运行docker-compose up。 - Gabbax0r
3
@Gabbax0r 确实,那是docker-compose的文档,而不是docker的文档。我是指涉及使用docker stack和docker-compose.yml的Docker入门“介绍”,但从未提到docker-compose工具本身。这可能是一种次要的文档不一致性。https://docs.docker.com/get-started/ - davidA

8

补充Gabbax0r的回答:

Docker Swarm是一个独立组件,用于将Docker引擎集群化为单个引擎。

自Docker 1.12版本起,“Swarm”独立组件已经整合到Docker引擎中(请阅读此页面的前言),Swarm现在已经是过时的技术。

回答你最初的问题,它们只是不同情况下使用的不同名称,但它们都旨在达到相同的目的。

回答你的评论问题,如果你需要在单个节点上编排多容器应用程序,则使用docker-compose;如果你需要担心多节点和负载均衡等高级问题,则最好选择Swarm。


为什么不在单个节点上使用Swarm呢? - KajMagnus
@KajMagnus 你可以这样做,但那样做的目的是什么? - linuxbandit
2
Linuxbnndit:当你学习单节点的Swarm时,你将学习Swarm的语法和术语,而不是Docker-Compose。稍后,如果你想扩展到多个节点,你已经熟悉了Swarm,并且你可能构建的所有工具都将使用Swarm命令。所以你可以节省一些时间。...我实际上发布了一个问题:https://dev59.com/ylcO5IYBdhLWcg3wVAA0 - KajMagnus

0

docker-stack.yml 相对于 docker-compose.yml 有以下优势:

  1. 分别更新

    在使用服务、集群和 docker-stack.yml 文件时,请记住支持服务的任务(容器)可以部署在任何节点中。

    每次更新服务时,这可能会应用于不同的节点。

  2. 远程部署

    如果您正在私有主机上运行Docker Swarm,则可以使用 docker-stack.yml 使用 SSH 密钥访问和远程部署应用程序到主机。

    您甚至可以使用像 Codefresh 这样的服务来实现。


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