码迷,mamicode.com
首页 > 其他好文 > 详细

Docker Compose与Docker Stack的不同之处

时间:2019-09-27 19:11:12      阅读:371      评论:0      收藏:0      [点我收藏+]

标签:color   文件中   需要   命令   细节   compose   不可   安装docker   Go语言   

翻译原文

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/

 

Docker Compose与Docker Stack的不同之处

标签:color   文件中   需要   命令   细节   compose   不可   安装docker   Go语言   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!