虽然 @MagicMicky 给出的答案是正确的,但我将尝试添加更多关于 Swarm Legacy 和 Swarm Mode 之间关于服务发现的差异的上下文:
Note:我将 Swarm 的第一个版本称为群体遗产新版本为 Swarmmode.
使用 Swarm Legacy 进行服务发现
Using 虫群遗产,你必须部署自己的动物园管理员, Consul or Etcd管理集群拓扑,这意味着节点被分配为集群中的代理。这些分布式键/值存储用于健康监控和分布式锁定目的。 Swarm 不使用它们来管理服务发现,而只是集群节点发现和监控.
如果您希望通过 Swarm 部署容器的服务发现,则必须设置外部 Consul/Registrator/DNS,并在这些解决方案上注册您的服务。我想到的一个专门为 Swarm 构建的系统的例子是Wagl https://github.com/ahmetalpbalkan/wagl.
使用更高版本的 docker 引擎(1.11
),在创建覆盖网络并将容器分配到覆盖网络时,您还可以访问内置 DNS。前1.11
,服务发现的(有争议的)机制是通过附加服务条目/etc/hosts
.
无论如何,覆盖网络并未直接包含在 Swarm 中,这是一个需要自己设置的独立组件。它更像是一个“附加组件”。
一般来说,Swarm 第一个版本背后的“哲学”是提供一些简单而可靠的东西来管理跨主机的容器,如果您需要添加更多功能,例如服务发现或负载平衡,您必须推出自己的功能。
使用 Docker Swarm 模式进行服务发现
从 Docker 开始1.12
服务发现直接包含在docker中通过群体模式与嵌入式 DNS 和负载均衡器。这意味着不再需要外部组件来管理服务发现和负载平衡。
当您创建服务并将其分配给覆盖层时,会注册其 DNS 名称,并且覆盖层的其他服务部分可以通过其服务名称访问它。使用内置负载均衡器可以对为服务运行的任务进行正确的负载平衡。
对于 Swarm 模式,“理念”更多的是包括开箱即用的所有内容(证书管理和轮换、服务发现、负载平衡、通过内置数据存储的集群元数据、网络、调度),以确保您拥有最完整的系统从第一天起就成为可能。如果需要,您仍然可以交换和更换某些组件。