Docker学习(六):Docker Compose和Docker Stack区别

作者:water_lang
链接:https://www.jianshu.com/p/05be80475bff

在最近的发布版本中,Docker圈发生了一些事情。 Swarm模式已经在1.12中集成到Docker Engine中,并给我们带来了几个新工具。 其中,我们可以在不安装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 stack与Docker Compose有什么不同呢? 为什么要介绍它? 除了语法之外,我们还须要知道些什么呢?

不同点

Docker stack会忽略了“构建”指令。 您无法使用stack命令构建新镜像。 它是需要镜像是预先已经构建好的。 所以docker-compose更适合于开发场景。

还有一些compose-file规范被docker-compose或stack命令忽略。 (搜索“忽略”可以查看更多详细信息)。

Docker Compose是一个Python项目。 最初,有一个名为fig的Python项目,用于解析fig.yml文件,你猜对了 - 堆栈的Docker容器。每个人都喜欢它,特别是Docker的追随者,最后它慢慢的融入了docker产品中。但它仍然在Python中,运行在Docker引擎之上。

在内部,它使用Docker API规范来操作容器。所以您仍然需要分别安装Docker -compose,以便与Docker一起在您的计算机上使用。

Docker Stack功能包含在Docker引擎中。你不需要安装额外的包来使用它,docker stacks 只是swarm mode的一部分。它支持相同类型的compose文件,但实际的处理是发生在Docker Engine(docker引擎)内部的Go代码中。 在使用堆栈命令之前,还必须创建一个单机版的“swarm”,但这并不是什么大问题。

如果你的docker-compose.yml 是基于第二版写的(在docker-compose.yml中指定version: "2"),那么Docker stack是不支持的。你必须使用最新版本,也就是version版本至少为3.然而Docker Compose对版本为2和3的 文件仍然可以处理。

总结

docker-compose和新命令docker stack commands都可以处理版本号为3的docker-compose.yml文件。对于版本号为2的文件,你不得不继续使用docker-compose. 如果你想升级,也不需要做太多的工作。

由于docker stack把docker compose的所有工作都做完了,因此可以肯定docker stack将占主导地位。这意味着docker-compose可能会被弃用,最终不会被支持。

然而,对于大多数用户来说,切换到使用docker stack既不困难,也不需要太多的开销。 您可以在将docker compose从版本2升级到版本3的同时轻松完成。

如果您是Docker新手,或正在选择用于新项目的技术 - 无论如何,请坚持使用docker stack deploy。

你可能感兴趣的:(Docker)