Docker,Registrator和Consul by example

时间:2015-09-23 16:56:13

标签: docker consul

我是Docker和Consul的新手,我试图了解容器化应用程序如何将Consul用于两者服务注册表和KV配置配置管理("配置&#34 ;)

我的理解就是我能够:

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

首先,如果其中任何一个看起来像是误解了Docker和Consul(没有Registrator)的正常/正确使用,请首先纠正我!

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

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

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

我的担忧:

  • 我的理解是正确还是远离基地?如果是这样,怎么样?
  • 添加Registrator实际获得了什么。对于应用程序和服务注册表之间的间接层而言,它似乎(至少未训练的眼睛)似乎没有任何东西。
  • 我是否仍然可以通过Registrator利用Consul的KV配置服务?

1 个答案:

答案 0 :(得分:9)

  

我的理解是正确还是偏离基础?如果是这样,怎么样?

在我看来,让所有群集/仲裁成员在同一个VM中运行并不是一个好的解决方案。如果你将它用于开发或挖掘或其他东西,那里并不是那么糟糕,你不关心可靠性,但不关心生产。

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

至于其余部分,我认为它和你一样。

  

添加Registrator实际获得了什么。

从我的角度来看,主要的是,您不必在每个运行的容器中提供Consul Agent的实例。带有运行图像的容器只负责其主要功能,而不是在某处注册。你可以简单地拉一个图像,然后用它运行一个容器,以使它的服务可用,而不需要额外的工作。

  

我是否仍然可以通过Registrator利用Consul的KV配置服务?

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

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