72

我正在学习如何使用 Docker Compose 在多个容器中跨多个主机部署应用程序。而且我遇到了两个配置文件-堆栈文件和撰写文件。

Cloud stack file YAML reference中,它指出堆栈文件是 YAML 格式的文件,它定义了一个或多个服务,类似于docker-compose.yml文件但具有一些扩展名。

这篇文章中,它指出堆栈与 docker-compose 非常相似,只是它们定义了服务,而 docker-compose 定义了容器

它们看起来非常相似,所以我想知道何时使用堆栈文件,何时使用 Compose 文件?

4

2 回答 2

69

从概念上讲,这两个文件具有相同的目的——在 docker 引擎上部署和配置容器。

首先创建了 Docker-compose 工具,其目的是在单个 Docker 引擎上“定义和运行多容器 Docker 应用程序”。(请参阅docker 撰写概述

您用于docker-compose up创建/更新您的容器、网络、卷等。

Docker Stack在Docker Swarm(Docker 的编排和调度工具)中使用,因此,它具有单个 Docker 引擎上不需要的额外配置参数(即副本、部署、角色)。

堆栈文件由docker stack命令解释。此命令只能从 docker swarm 管理器调用。

您可以将 docker-compose.yml 转换为 docker-cloud.yml 并返回。但是,正如您的问题所述,您必须注意差异。此外,您需要记住 docker-compose 有不同的版本。目前,最新版本是第 3 版。(https://docs.docker.com/compose/compose-file/

编辑:一个有趣的博客,可能有助于理解差异,可以在这里找到https://blog.nimbleci.com/2016/09/14/docker-stacks-and-why-we-need-them/

于 2017-03-29T17:39:50.183 回答
16

注意:问题猜测 Docker Cloud 参考是理解堆栈的首选,它很有用,但这不是堆栈与 compose 的权威来源——而是特定于 Docker 托管服务的指南:“Docker Cloud 提供带有构建和测试设施的托管注册表服务。” 有关文件文档,请参阅Compose 文件版本 3 格式——尽管它被命名为“Compose”,但这是功能与 compose 和 swarm/stack 一起使用以及如何使用的权威位置。

您可以通过两种方式指定一组 Docker 容器进行配置和部署:

  1. 码头工人撰写(docker-compose up
  2. 码头工人群 ( docker swarm init; docker stack deploy --compose-file docker-stack.yml mystack)

两者都采用以 Docker Compose 文件版本 3 格式编写的 YAML 文件。该参考资料是记录 docker-compose 和 docker swarm/stack 配置的主要来源。

但是,您可以在两个 yml 文件中执行的操作之间存在特定差异——特定选项和特定命名约定:

选项

可用的服务配置选项记录在Compose 文件参考页面上——通常在选项条目的底部有一个注释,将其描述为 bydocker stack deploy或 by忽略docker-compose up

例如,在使用(版本 3)Compose 文件以 swarm 模式部署堆栈时,会忽略以下选项:

build、cap_add、cap_drop、cgroup_parent、container_name、depends_on、devices、external_links、links、network_mode、restart、security_opt、stop_signal、sysctls、tmpfs(版本 3-3.5)、userns_mode

...虽然某些选项被 忽略docker-compose,但可以与 一起使用docker stack deploy,例如:

部署,restart_policy

从命令行运行时,docker stack deploy将打印有关忽略哪些选项的警告:

忽略不支持的选项:链接

文件命名

  • 对于docker-compose up默认文件名,docker-compose.yml如果没有使用指定备用文件名-f(请参阅撰写参考)。通常使用此默认名称并运行不带参数的命令。

  • 因为docker stack deploy 参考docker stack deploy中没有给出默认文件。你可以使用任何你想要的名字,但是这里有三个约定:

    1. 使用docker-stack.yml,在官方 Docker for Beginners Ch.3 中使用:将应用程序部署到 Swarm
    2. 使用docker-cloud.yml,在Docker Cloud Stack YML 参考中用于 Docker Cloud 服务。
    3. use docker-compose.yml-- Compose 文件格式的旧默认名称。
于 2018-08-07T00:41:08.670 回答