Docker 什么';堆栈文件和编写文件之间的区别是什么?

Docker 什么';堆栈文件和编写文件之间的区别是什么?,docker,docker-compose,docker-swarm,docker-swarm-mode,Docker,Docker Compose,Docker Swarm,Docker Swarm Mode,我正在学习如何使用Docker Compose在多个容器中跨多个主机部署应用程序。我遇到了两个配置文件——堆栈文件和组合文件 从中可以看出,堆栈文件是一个YAML格式的文件,它定义了一个或多个服务,类似于docker compose.yml文件,但有一些扩展名 从中可以看出,堆栈与docker compose非常相似,只是它们定义了服务,而docker compose定义了容器 它们看起来非常相似,所以我想知道何时使用堆栈文件,何时使用组合文件?从概念上讲,这两个文件都有相同的用途—在docke

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

从中可以看出,堆栈文件是一个YAML格式的文件,它定义了一个或多个服务,类似于
docker compose.yml
文件,但有一些扩展名

从中可以看出,堆栈与docker compose非常相似,只是它们定义了服务,而docker compose定义了容器


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

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

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

您可以使用
docker compose up
创建/更新容器、网络、卷等

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

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

您可以将docker-compose.yml转换为docker-cloud.yml并返回。然而,正如你在问题中所说,你必须注意这些差异。另外,您需要记住docker compose有不同的版本。目前,最新版本为第3版。()

编辑:在这里可以找到一个有趣的博客,它可能有助于理解这些差异

注意:问题猜测Docker Cloud参考是理解堆栈的参考,它很有用,但这不是stack vs compose的权威来源,而是Docker托管服务的特定指南:“Docker Cloud提供了一个带有构建和测试设施的托管注册表服务。”有关文件文档,请参阅——虽然它的名称为“Compose”,但这是一个权威的地方,它的功能可以同时与Compose和swarm/stack一起使用,以及如何使用

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

  • Docker compose(
    Docker compose up
  • Docker swarm(
    Docker swarm init;Docker stack deploy——编写文件Docker-stack.yml mystack
  • 两者都采用Docker中编写的YAML文件。该引用是记录Docker compose和Docker swarm/stack配置的主要来源

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

    选择权 可用的服务配置选项记录在页面上——通常在选项条目底部有一个注释,说明它被
    docker stack deploy
    docker compose up
    忽略

    例如,以下选项适用于(版本3)合成文件:

    构建、cap\u添加、cap\u删除、cgroup\u父级、容器名称、依赖、设备、外部链接、链接、网络模式、重启、安全选项、停止信号、系统控制、tmpfs(版本3-3.5)、用户模式

    …虽然一些选项被
    docker compose
    忽略,但可以使用
    docker stack deploy
    ,例如:

    部署、重新启动\u策略

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

    忽略不支持的选项:链接

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

    • 对于
      docker stack deploy
      ,中没有提供默认文件。您可以使用任何名称,但有三个约定:

    • 使用docker stack.yml,如官方初学者docker第3章所述:
    • 使用docker cloud.yml,如docker cloud服务的中所用
    • 使用
      docker compose.yml
      ——编写文件格式的旧默认名称

    问得好。我也想问一下,既然我们已经有了Docker compose,为什么我们还需要Docker stack?在第二个链接中,它指出Docker stack是Docker引擎的一项服务,而Docker compose不是。那么,为什么我们不能升级Docker compose并使其成为一项服务呢?@lonelyloner问得好,我猜这是因为Docker compose是一个t它是自己的ool,没有集成到docker中。在Linux上,我必须单独安装它,在Windows上,我相信它是与docker一起安装的。希望将来docker会合并它们,只有堆栈文件。是的,这让我很困惑,因为Compose文件还提到了swarm相关的属性,例如,我是谁当您使用
    docker compose
    时,会被忽略,并且仅在实际操作中
    docker stack deploy
    。我想,出于所有目的,对于3+版本的compose,它们是相同的?版本3与2不同。不是很多。特别是卷的声明方式。还有其他更改。版本3 compose应该能够在swarm上工作无需更改,但实际上您可能希望添加swarm配置,尤其是当您的容器有卷并且您无法承受重新部署时丢失其数据时。@sudo“docker stack“仅适用于Docker Swarm。docker compose是dock的一个附加组件,用于帮助在单个docker引擎上协调服务。Docker stack是Docker compose的一个大脑孩子。希望将来他们能合并机器人