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

What's the difference between a stack file and a Compose file?

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

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

并且从 this post 开始,它指出 堆栈与 docker-compose 非常相似,除了它们定义服务而 docker-compose 定义容器.

它们看起来很像,所以我想知道什么时候用stack文件,什么时候用Compose文件?

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

Docker-compose 工具首先创建,其目的是在单个 docker 引擎上“用于定义和 运行 多容器 Docker 应用程序”。 (见 docker compose overview

您使用 docker-compose up 来 create/update 您的容器、网络、卷等。

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

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

您可以将 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/

Note: The question guesses that the Docker Cloud reference is the go-to for understanding stack, and it is useful, but that isn't the authoritative source on stack vs compose -- instead that is a guide that is specific to Docker's hosted service: "Docker Cloud provides a hosted registry service with build and testing facilities." For file documentation, see the Compose file version 3 format -- although it is named "Compose", this is the authoritative place for which features work with both compose and swarm/stack, and how.

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

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

两者都取一个写在DockerCompose file version 3 format中的YAML文件。该参考资料是记录 docker-compose 和 docker swarm/stack 配置的主要来源。

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

选项

可用的服务配置选项记录在 Compose file reference 页面上——通常在选项条目的底部有一个注释,描述它被 docker stack deploy 或 [=10= 忽略].

例如,以下选项 ignored when deploying a stack in swarm mode 具有(版本 3)撰写文件:

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

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

deploy, restart_policy

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

Ignoring unsupported options: links

文件命名

  • 对于 docker-compose up,如果未使用 -f 指定备用文件名,则默认文件名是 docker-compose.yml(请参阅 compose reference)。通常使用此默认名称和 运行 不带参数的命令。

  • 对于 docker stack deploydocker stack deploy reference 中没有给出默认文件。您可以使用任何您想要的名称,但这里有三个约定:

    1. 使用 docker-stack.yml,如官方 Docker 初学者第 3 章所用:Deploying an app to a Swarm
    2. 使用 docker-cloud.yml,在 Docker Cloud Stack YML reference 中用于 Docker 云服务。
    3. 使用 docker-compose.yml -- Compose 文件格式的旧默认名称。