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

时间:2017-03-29 16:41:30

标签: docker docker-compose docker-swarm docker-swarm-mode

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

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

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

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

2 个答案:

答案 0 :(得分:44)

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

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

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

Docker Swarm(Docker'编排和调度工具)中使用了 Docker Stack ,因此,它还有其他不需要的配置参数(即副本,部署,角色)在一个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/

答案 1 :(得分:4)

  

注意:该问题猜测Docker Cloud参考是理解堆栈的必经之路,它很有用,但这不是堆栈与组合的权威来源-而是是专门针对Docker托管服务的指南:“ Docker Cloud提供具有构建和测试功能的托管注册表服务。”有关文件文档,请参见Compose file version 3 format -尽管它的名称为“ 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 file version 3 format编写的YAML文件。该参考资料是记录docker-compose和docker swarm / stack配置的主要来源。

但是,在这两个yml文件中可以执行的操作之间存在特定的区别-特定的选项和特定的命名约定:

选项

可用的服务配置选项记录在Compose file reference页上-通常在选项条目的底部有一个注释,描述它被docker stack deploydocker-compose up忽略。

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

  

build,cap_add,cap_drop,cgroup_parent,container_name,depends_on,设备,external_links,链接,network_mode,重启,security_opt,stop_signal,sysctls,tmpfs(3-3.5版),userns_mode

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

  

部署,重新启动策略

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

  

忽略不支持的选项:链接

文件命名

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

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

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