1

我无法理解分离服务发现服务器的需求,而我们可以通过任何协议在从节点启动时将从节点注册到主节点。托管另一项服务对我来说似乎是多余的。

4

1 回答 1

5

Docker Swarm用于创建运行 Docker 的主机集群并在集群中调度容器。
它不包括服务发现,它由后端服务提供,例如 etcd、consul 或 zookeeper。

  • 第一个问题:服务注册和发现是基础设施问题,而不是应用程序问题。
  • 第二个问题:当基础设施和应用程序实现相互不可知时,实现服务注册和发现是困难的。

DockerCon今天早上(2015 年 11 月 16 日)通过“Docker Stack”明确了这一区别:

在此处输入图像描述
(来自@laurelcomics的图片)

Docker 网络通过支持一个接口 (DNS) 来解决这些问题,该接口具有可插入的基础架构组件,这些组件遵循一个通用的 KV 接口。

你可以看到consul.io用于:

这意味着:

  • Consul是一个 KV(键/值)存储,可以插入 Swarm 以管理服务发现方面。
  • Swarm是访问层,通常是包含允许其他人实际访问您的服务的网关或路由组件的层。

https://cdn-images-1.medium.com/max/800/1*aQpT7eAmwhWItNuIi9PXFw.png

(图片来自Ladislav Gazo撰写的“使用 Docker、Consul 和 nginx 轻松路由和服务发现”一文)

目标是在自己的容器中隔离基础设施问题(发现服务),与开发工具问题(Swarm)分开。

于 2015-11-15T17:58:58.910 回答