堆栈文件和Compose文件之间有什么区别?

day*_*oli 48 docker docker-compose docker-swarm docker-swarm-mode

我正在学习如何使用Docker Compose在多个主机上的多个容器中部署应用程序.我遇到了两个配置文件 - 堆栈文件和Compose文件.

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

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

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

Rom*_*Mik 47

从概念上讲,这两个文件都有相同的用途 - 在docker引擎上部署和配置容器.

首先创建了Docker-compose工具,其目的是"在单个docker引擎上定义和运行多容器Docker应用程序".(参见码头撰写概述)

您可以使用它docker-compose up来创建/更新容器,网络,卷等.

泊坞堆在码头工人群(泊坞窗的编排和调度工具),因此,它具有其它配置参数使用(即副本,部署角色),不需要在一个单一的码头工人引擎.

堆栈文件由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/

  • @sudo"docker stack"仅适用于Docker Swarm.docker-compose是一个用于停靠的附加组件,用于帮助在单个docker引擎上编排服务.Docker堆栈是docker-compose的脑子.希望将来,他们将两者合并在一起并保持泊坞堆栈 (7认同)
  • 那么使用compose而不是堆栈有什么意义吗? (2认同)

Jer*_*ass 15

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

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

  1. Docker 组合 ( docker-compose up)
  2. Docker 群 ( docker swarm init; docker stack deploy --compose-file docker-stack.yml mystack)

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

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

选项

可用的服务配置选项记录在Compose 文件参考页面上——通常在选项条目的底部有一个注释,将其描述为被docker stack deploy或忽略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 deploydocker stack deploy 参考中没有给出默认文件。你可以使用任何你想要的名字,但是这里有三个约定:

    1. use docker-stack.yml,如官方 Docker for Beginners Ch.3: Deploying an app to a Swarm 中所用
    2. use docker-cloud.yml,在Docker Cloud Stack YML 参考中用于 Docker Cloud 服务。
    3. 使用docker-compose.yml-- Compose 文件格式的旧默认名称。

  • 很好的概述:-)。我发现 Compose 文件参考文档中的条目不适用于 (Docker-) Compose :- P (3认同)
  • @KajMagnus我同意,应该有一个过滤器来仅查看在任一情况下可用的选项。 (2认同)