从我读到的内容看来,Docker-Compose是一个在单个主机上创建多个容器的工具,而Docker Swarm是一个可以完全相同但具有更多控制权的工具,在Docker的帮助下可以在多个主机上完成堆。我浏览了这个教程并且也遇到了这个帖子:
docker-compose.yml vs docker-stack.yml what difference?
我得出的结论是,当你可以将Docker Swarm与Docker Stack一起使用时,没有理由使用Docker-Compose。他们甚至可以使用相同的docker-compose.yml。
似乎Docker-compose出现在swarm和堆栈之前,可能是swarm + stack的新解决方案使得compose过时了,但它仍然是遗留原因。这个想法是否正确?如果没有,Docker-Compose在开发或生产环境方面对Docker Swarm和Docker Stack有什么好处?
答案 0 :(得分:8)
似乎Docker-compose出现在swarm和堆栈之前,可能是swarm + stack的新解决方案使得compose过时了,但它仍然是遗留原因。这种想法是否正确?
简而言之,是的。 Compose在所有Swarm之前出现(它起源于名为fig
的第三方实用程序)。更糟糕的是,甚至还有两个不同的Swarms,旧Swarm(一个是单独的工具)和Swarm模式(最近内置于docker
二进制文件中)。
它似乎正在发展为内置于Docker中的服务和部署概念。但我猜想Docker Compose和Swarm Mode部署的东西会并存一段时间。
知道Docker Compose基础是一个名为libcompose
(https://github.com/docker/libcompose)的库是有益的,其他第三方实用程序使用它来支持docker-compose.yml
文件格式的部署(参见Rancher和rancher-compose
作为例子)。我想他们会努力继续支持libcompose
。
我不清楚Docker Swarm部署内容是否实际使用libcompose
。在我粗略的搜索中,Swarm模式似乎不实现libcompose
并做自己的事情。我不确定这与Docker Compose和libcompose
的未来有何关系。你认为合适的解释......
答案 1 :(得分:3)
从我发现的内容:What's the difference between Docker Swarm, Docker Compose and Docker Networks?
Docker Compose 是一个客户端工具,允许您运行具有多个组件的应用程序堆栈。
因此,在我们的场景中,您将使用Docker Compose来实现 - #2 *¹。您将定义一个spec文件,您可以在其中定义容器必须为每个组件构建的方式 - db,app和web tier。您还可以指定它们如何相互作用。每个和许多其他事情的实例数。
*¹现在您需要启动具有Web层,应用层和数据库层的应用程序堆栈。
Compose is a tool for defining and running multi-container Docker applications.
Docker Swarm 是服务器端功能,可让您:
swarm是一个docker节点(机器)集群,充当启动多个容器的底层资源。可以跨群集协调和部署服务。
您可以将多个节点组合为一个集群,然后将“docker run”命令发送到此集群(实际上发送到Swarm管理器节点)Swarm将处理其中一个节点上的此容器的调度(启动)。
允许所有节点上的容器相互通信
查看官方文档:Swarm mode overview& Docker Compose