我试图了解 D-Compose 和 D-Swarm 之间的差异或相似之处。
通过阅读文档,我了解到docker-compose提供了一种机制,可以将不同的容器绑定在一起并协同工作,作为单一服务(我猜测它使用与 - 用于链接两个容器的链接 命令)
另外,我对docker-swarm的理解是,它允许您管理不同 docker-hosts 的集群,每个集群运行一些docker-images的容器实例。我们可以将群体中不同容器之间的连接定义为 overlay-networks (即使它们跨越swarm中的两个docker-hosts)将它们作为一个单元连接起来。
我想要了解的是,docker-swarm成功了docker-compose和覆盖网络是连接容器的新(推荐)方法吗?
或者,docker-compose仍然是整个docker系列中不可或缺的一部分,并且可以使用它来连接容器以协同工作。如果是这样的话,docker-compose会在swarm中的不同节点上使用容器吗?
或者是覆盖网络用于在群集中的不同主机之间连接容器,而docker-compose用于创建内部链接吗?
此外,我还看到docker文档中提到 - links 不再推荐,并且很快就会过时。
我有点困惑???
非常感谢!
答案 0 :(得分:72)
从一些定义开始可能会有所帮助:
docker run
等命令重现它的行为。回答问题:
docker-swarm成功了docker-compose和覆盖网络是连接容器的新(推荐)方法吗?
或者,docker-compose仍然是整个docker系列中不可或缺的一部分,并且可以使用它来连接容器以协同工作。如果是这样的话,docker-compose会在swarm中的不同节点上使用容器吗?
它们提供不同的功能,并将继续发挥作用。 docker-compose无法在swarm模式下启动容器,但是较新版本的docker-compose.yml文件(版本3)可用于直接在swarm模式下定义堆栈,而无需使用docker-compose本身。需要docker-compose来管理群集模式之外的容器,单个docker引擎或经典swarm。
或者是覆盖网络用于在群集中的不同主机之间连接容器,而docker-compose用于创建内部链接吗?
此外我还看到在docker文档中提到 - 不再推荐链接,很快就会过时。
docker-compose从yml文件的第2版开始默认情况下将多个容器连接在一起,每个项目都有一个新的桥接网络(项目默认为目录名)。使用经典swarm,默认使用外部k / v存储的覆盖网络。使用群集模式堆栈,这将是一个覆盖网络。
使用docker networks是让容器相互通信的首选方式。您希望每组容器都有一个网络,希望与其余的docker环境隔离。 docker-compose会自动创建此网络,但您也可以使用docker networks create
从命令行执行此操作。
链接已经在很大程度上被具有内置DNS发现的docker网络所取代。从docker-compose.yml中删除链接时,可能需要将其替换为depends_on
部分以强制执行容器启动顺序。否则,很少有情况下链接有意义,我看到的所有用法都来自过时文档的人。
答案 1 :(得分:9)
撰写或群组或群组覆盖网络
如果您在笔记本电脑上进行演示以外的任何操作,您会发现需要使用上述所有内容。
我故意将swarm&群集覆盖网络,因为你不需要同时使用它们,但是如果没有一个群集,你就无法获得覆盖网络。
撰写是为了将多个容器组合在一起。现在它们彼此相关是有意义的,尽管它们可能不相关。但是,假设一个典型的情况是当容器用于彼此相关的服务时,那么你会希望它们以某种方式相互通信,但是控制它们如何使用网络相互通信。例如,采用具有Web服务器,appserver和db的3层应用程序。让我们说所有三个组件都是docker化的,你正在使用compose将它们组合在一起而不是用不同的参数运行docker run..
三次等等。所有这三个都会出现,但是你想要控制它们的方式相互连接。您希望Web服务器能够与应用程序服务器通信,而不是直接与数据库通信。并且您希望appserver与数据库服务器容器通话(ping)并ping Web服务器。所有连接都是双向的,但仅限于您希望能够相互通信的那些服务。对于这样的安排,您通常会设置2个网络 - 比如frontend
和backend
。 Web和app容器连接到前端网络。 app和db容器连接到后端网络。因为db和web容器之间没有公共网络,所以它们不能互相触摸(ping),这是你的意图。
现在,如果您希望这三种服务能够在100台计算机的群集上运行,并且您还想跨越它们进行扩展,那么您需要一个跨多个主机的网络。这就是覆盖网络(群集)出现的情况。覆盖网络只不过是通过VxLAN技术构建的多主机网络。您不必了解VxLAN,除了它是几乎所有现代网络基础架构都支持的标准网络拓扑。
我希望澄清。
编辑:我没有看到你已经得到答案了!
答案 2 :(得分:4)
我认为你对大部分内容的理解是正确的,但需要进行一些调整。
你是正确的docker-compose是打开多容器应用程序。之前您曾经docker run ..
启动每个容器。通常,包含微服务范例的现代应用程序可以由许多服务组成,并且使用docker run ..
将很快变得非常烦人。因此,docker-compose允许您表达所有容器及其属性以及它们如何作为yaml
或json
文件相互连接,以便您可以更轻松地管理它。
因此,docker-compose是docker生态系统中的容器编排部分。
链接不同,它们只是docker-compose或docker run
命令的一部分,不推荐使用software defined networks
,其中overlay networks
只是其中之一。
Swarm是docker中的调度组件。什么是日程安排 - 它只是找出将容器“放置”在您的docker主机群集中的位置。您可以拥有数百个服务器的集群,并且您可能拥有数百个容器,每个容器都封装了十几个不同应用程序的服务。现在如何将这些容器分布在数百个服务器的集群中,如果某些容器只能放在某些主机上,因为它们满足特定条件,或者它们应该更接近(或不是)与某些相关的其他容器......所有这些都是由docker Swarm执行的调度组件的一部分。
我建议您在这里查看docker.com上的入门文档:https://docs.docker.com/engine/getstarted-voting-app/