Docker Compose与Docker Stack的不同之处

翻译原文

Docker引擎在1.12 版本集成了Docker Swarm,  带来了一些新工具。

现在可以无需安装 Docker Compose, 就可以利用docker-compose.yml 文件创建Docker 容器堆栈。

这个命令是 docker stack,  使用方式与docker-compose 类似, 下面是示例:

$ docker-compose -f docker-compose up

$ docker stack deploy -c docker-compose.yml somestackname

使用方式基本相同,这两个命令都能操纵docker-compose.yml文件中定义的docker services、volumes 、networks等。

但是为什么会发生这种情况,并且Docker Stack与Docker Compose是否有所不同?为什么要引入?除了语法,还有什么不同?

表象不同点

① docker stack 忽略了docker-compose中的“build”指令, 你不可以在stack 命令中创建镜像。 Docker stack 需要已经存在的镜像, 因此docker compose更适合开发场合。

② docker stack 、docker-compose 各自都会忽略docker-compose.yml文件部分指令, 请在这个页面中搜索 “ignore” 查看更多细节。

最初诞生的差异

docker-compose 是一个Python 项目。 最初有一个名叫fig的Python项目能够解析 fig.yml ------- 启动docker 容器堆栈。

所有人都很喜欢这个工具,尤其是github fork 这个项目的forkers, 这个工具慢慢产品化并被改名为docker-compose,

但是这始终是一个Python工具,作用在Docker引擎的顶层

  在内部,它使用Docker API根据规范启动容器,您仍然必须单独安装docker-compose才能将其与Docker一起在您的计算机上使用。

------------------------------------------###-------------------------------------------------

docker stack的能力来源自docker引擎内部,你不需要安装额外的工具包去启动docker 容器堆栈(docker stack 是docker swarm的一部分)。

docker stack 支持与docker-compose 相似的能力, 但是在Docker引擎内Go语言环境中运行的, 在使用docker stack命令之前你还必须创建一个swarm机器(这也不是什么问题)。

docker stack 不支持版本2规范编写的docker-compose.yml文件,必须使用最新的3.0+ 版本。docker-compose工具依然可以处理 版本2,3(如上所述,会忽略掉不再适用于该工具的某些指令)。

结论

docker stack 和docker-compose 都可以应用在版本3编写的docker-compose.yml 文件上,版本3之前的docker-compose.yml 文件可继续使用docker-compose工具,

如果你想要升级,也不会花很多时间。

因为docker stack几乎能做docker-compose 所有的事情,如果你打算使用docker swarm 操纵容器,可以尝试一下docker stack。

如果你仅需要一个能操作多个容器的工具,你依旧可以使用docker-compose 工具。

我的看法

现在docker-compose.yml 版本3与docker stack有些耦合,甚至于有些捆绑。

这个捆绑不仅体现在docker-compose版本3页面中“Ignore”的指令:

build、cap_add, cap_drop、external_links 等

还包括在很常用的两个功能:

restart_policy指令: 这个容器自动重启指令在版本3中处于deploy指令下面,deploy指令又必须捆绑docker stack,导致版本3编写的docker-compose.yml 不能原生自动重启容器。 F**K’

env file:: docker-compose工具默认会识别并应用同目录下的.env 环境变量文件, 而这个常见的功能竟然在docker  stack 指令中被忽略。

猜测Docker 公司是想让大家在应用docker-compose 版本3的时候使用docker stack(docker stack 是docker swarm 的一部分),

在Kubernetes已经成为事实上的集群容器编排标准的情况下,Docker 公司妄图通过将docker-compose.yml 版本3文件与Docker Swarm捆绑, 以期扩大Docker Swarm的市场占有率。

所以我的建议是如果你要上手 Kubernetes,暂时可以忽略docker stack命令, 因为要将docker-compose版本3文件升级到Docker Swarm环境并不是 想象的那么简单。

原文: https://vsupalov.com/difference-docker-compose-and-docker-stack/

原文地址:https://www.cnblogs.com/JulianHuang/p/11599170.html

时间: 2024-10-03 09:09:59

Docker Compose与Docker Stack的不同之处的相关文章

Docker,Docker Compose,Docker Swarm,Kubernetes之间的区别

最近在学习Docker容器,了解到一些相关的技术,像是Kubernetes,Docker-compose,Docker Swarm,分不清这些东西之间的区别,特意去研究了一下,分享一下,适合刚入门学习容器的同学了解. DcokerDocker 这个东西所扮演的角色,容易理解,它是一个容器引擎,也就是说实际上我们的容器最终是由Docker创建,运行在Docker中,其他相关的容器技术都是以Docker为基础,它是我们使用其他容器技术的核心. Docker-ComposeDocker-Compose

Docker Compose

compose项目简介 compose项目来源于之前的Fig项目,使用python代码编写.compose项目主要用于编排部署基于docker的应用.本身与docker/swarm配合度很高. Docker Compose 是 Docker 编排服务的一部分,可以让用户在其它平台快速安装Docker,Swarm 可以让 Docker 容器在集群中高效运转,而 Compose 可以让用户在集群中部署分布式应用.简单的说,Docker Compose 属于一个"应用层"的服务,用户可以定义

Docker Compose 项目

http://hongge.blog.51cto.com/ compose项目简介 compose项目来源于之前的Fig项目,使用python代码编写.compose项目主要用于编排部署基于docker的应用.本身与docker/swarm配合度很高. Docker Compose 是 Docker 编排服务的一部分,可以让用户在其它平台快速安装Docker,Swarm 可以让 Docker 容器在集群中高效运转,而 Compose 可以让用户在集群中部署分布式应用.简单的说,Docker Co

docker技术剖析--docker supervisor、compose

防伪码:有志不在年高,无志空活百岁. 一.使用 Supervisor 来管理进程 Docker 容器在启动的时候开启单个进程,比如,一个 ssh 或者 apache 的 daemon 服务.但我们经常需要在一个机器上开启多个服务,这可以有很多方法,最简单的就是把多个启动命令放到一个启动脚本里面,启动的时候直接启动这个脚本. 例如:docker  run  –d  镜像  /run.sh 另外就是安装进程管理工具. 本节将使用进程管理工具 supervisor 来管理容器中的多个进程.使用 Sup

Docker Compose安装

Docker Compose Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速在集群中部署分布式应用. 你可以也通过执行下面的命令,高速安装Docker Compose. curl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-com

(十)Docker Compose安装与创建Flask web应用

Docker Compose 是 Docker 官方编排(Orchestration)项目之一, 负责快速在集群中部署分布式应用. Dockerfile 可以让用户管理一个单独的应用容器:而 Compose 则允许用户在一个模板(YAML 格式)中定义一组相关联的应用容器(被称为一个 project,即项目),例如一个Web服务容器再加上后端的数据库服务容器等. 安装 该项目由 Python 编写,实际上调用了 Docker 提供的 API 来实现. 通过pip安装. $ python3 -m

通过 Docker Compose 组合 ASP NET Core 和 SQL Server

目录 Docker Compose 简介 安装 WebApi 项目 创建项目 编写Dockfile Web MVC 项目 创建项目 编写Dockfile 编写 docker-compose.yml文件 运行项目 源代码 参考 本文模拟一个比较完整的项目,包括前端(MVC), 后端(WebApi)和数据库(mssql-server-linux).通过Docker Compose 定义,组合并执行它们.涉及到 Docker Compose 安装,命令,docker-compose.yml文件编写,W

centos7 部署 docker compose

=============================================== 2019/4/10_第1次修改                       ccb_warlock =============================================== 将原先docker swarm的文章拆分后,我决定将docker compose的部署内容单独整理成文章,使得部署逻辑更清晰. docker compose是docker容器批量编排的工具,可以通过1个yml

Docker 核心技术之Docker Compose

Docker Compose 简介 Docker Compose是什么? Docker Compose是一个能一次性定义和管理多个Docker容器的工具. 详细地说: Compose中定义和启动的每一个容器都相当于一个服务(service) Compose中能定义和启动多个服务,且它们之间通常具有协同关系 管理方式: 使用YAML文件来配置我们应用程序的服务. 使用单个命令(docker-compose up),就可以创建并启动配置文件中配置的所有服务.  Docker Compose 工作原理