Docker Compose与Docker Stack的不同之处
Posted julianhuang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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/
以上是关于Docker Compose与Docker Stack的不同之处的主要内容,如果未能解决你的问题,请参考以下文章
docker-compose up与docker-compose up -d
Docker Compose与Docker Stack的不同之处
24.Docker技术入门与实战 --- Docker三剑客之Compose