Docker、Registrator 和 Consul 示例

标签 docker consul

我是 Docker 和 Consul 的新手,我正在尝试了解容器化应用如何将 Consul 用于服务注册表和 KV 对配置管理(“配置”)。

我的理解是我可以:

  • 创建一个运行 Consul 服务器的镜像,例如 this ;那么
  • myvm01.example.com(一个 Ubuntu 虚拟机)上启动三个 Docker-Consul 容器(从而形成一个集群/仲裁);那么
  • 重构我的应用程序以使用 Consul 并创建一个运行我的应用程序和 Consul 代理的 Docker 镜像,并将代理配置为在启动时加入 3 节点仲裁。在启动时,我的应用程序使用本地 Consul 代理来下拉其所有配置,并存储为 KV 对。它还引入已注册/健康的服务,并使用本地负载平衡工具来平衡与其集成的服务。
  • myvm02.example.com(另一个 Ubuntu VM)上运行我的应用容器。

首先,如果我对 Docker 和 Consul(无注册器)的正常/正确使用有任何误解,请先纠正我!

假设我或多或少是正确的,我最近偶然发现了 Registrator我现在更加困惑。 Registrator 似乎是您的应用容器和您的 Consul(或您使用的任何注册表)服务器之间的一些中间人。

阅读他们的快速入门教程后,听起来就像你应该做的是:

  • 像以前一样将我的 Consul 集群/仲裁容器部署到 myvm01.example.com
  • 我没有将我的应用程序“Dockerizing”以直接使用 Consul,而是将其与 Registrator 集成
  • 然后我在某处部署一个 Registrator 容器,并将其配置为与 Consul 集成
  • 然后我部署我的应用容器。它们与 Registrator 集成,而 Registrator 又与 Consul 集成。

我的担忧:

  • 我在这里的理解是正确的还是离谱的?如果有,怎么做?
  • 添加 Registrator 实际获得了什么。它似乎(至少在未经训练的人看来)只不过是应用程序和服务注册表之间的一层间接层。
  • 我还能通过 Registrator 使用 Consul 的 KV 配置服务吗?

最佳答案

Is my understanding here correct or way off base? If so, how?

在我看来,让所有集群/仲裁成员在同一个虚拟机中运行并不是一个好的解决方案。如果您将其用于开发或测试或其他您不太关心可靠性但不用于生产的东西,那还不错。

一旦您的 VM 死机,您将失去创建集群所拥有的所有优势。更重要的是,您可以丢失 K/V 存储中的所有数据,因为您在 docker 容器中运行 Consul 服务器,应该额外配置为在运行之间共享配置。

至于其他的,我的看法和你一样。

What is actually gained by the addition of Registrator.

在我看来,最主要的是,您不必在运行的每个容器中都提供 Consul Agent 的实例。并且您运行的带有镜像的容器只负责它们的主要功能,而不是在某处注册自己。您可以简单地拉取一个镜像并使用它运行一个容器,以使其服务可用,而无需进行额外的工作。

Will I still be able to leverage Consul's KV config service through Registrator?

很遗憾,没有。至少,当我们正在寻找一些东西来进行服务发现和配置管理时,我们没有找到以这种方式使用它的解决方案。我们得出的结论是,Registrator 不是 K/V 存储的代理,仅用于自动化服务发现。所以你必须使用其他一些逻辑来访问 consul 的 K/V 存储。

更新:此外,这里有 2 篇文章:"Automatic Docker Service Announcement with Registrator""Automatic container registration with Consul and Registrator" ,我发现了解注册器在服务发现过程中的角色很有用。

关于Docker、Registrator 和 Consul 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32745275/

相关文章:

docker 和领事 : Pinging services works but curl always returns couldn't connect to host error

docker - 如何使用领事初始化Docker群

ios-simulator - 从 iOS 模拟器访问 docker 容器

linux - 我如何在 ubuntu docker 中将 crontab 保存在文件中

docker - 如何在使用 gcloud compute instance update-container 或强制其使用默认驱动程序时设置日志驱动程序 gcplogs?

docker - 运行 consul docker 健康检查的问题

git - 如何将本地机器的 SSH key 传递给 docker 容器?

docker - OpenShift 3:设置+结构:我的主节点是什么?

logging - hashcorp consul 的日志文件在哪里?

amazon-web-services - 使用 progrium/docker-consul 出现 i/o 超时错误