我是docker和微服务的新手。我已经开始将我的网络应用程序分解为微服务,目前我正在进行手动配置。
经过一番研究,我遇到了码头群模式,它允许发现服务。此外,我遇到了其他服务发现工具,如Eureka和Consul。
我的主要目标是将curl调用中的IP地址替换为服务名称和同一服务的多个实例之间的负载平衡。
即。对于前卷曲http://192.168.0.11:8080/以卷曲http://my-service
我必须保持我的服务语言独立。
请建议,我是否需要使用Consul与docker swarm进行服务发现,或者我可以在没有Consul的情况下进行此操作?有什么好处?
答案 0 :(得分:6)
使用新的“群集模式”,您可以使用docker services跨多个群集节点创建群集服务。然后,您可以使用服务名称而不是请求中的节点名称来访问那些负载均衡的相同服务。
这仅适用于群组覆盖网络中的节点。如果您的客户端系统是同一群体的一部分,那么发现应该是开箱即用的,不需要任何外部解决方案。
另一方面,如果您希望能够从群组外的系统中发现服务,您可以选择以下几种方法:
--mode global
选项启动的docker服务(即haproxy,nginx)以确保它在所有节点上运行,或者是一个单独的负载均衡器,如Citrix netscaler。您需要让服务容器通过启动脚本或配置工具重新配置LB(或手动添加)。您当然可以将服务消费者移动到群组中。如果您将客户端与不同物理VLAN(或VPC等)中的服务分开,则需要在单独的覆盖网络中启动客户端容器,以确保不会有效地阻止已经存在的任何物理网络隔离。
答案 1 :(得分:0)
自版本1.12起,服务发现(通过dns)内置于docker中。当您创建自定义网络(如果您有多个主机时,如桥或覆盖),只要它们是同一网络的一部分,您就可以让容器通过名称相互通信。您还可以为每个容器创建一个别名,该别名将循环使用具有相同别名的容器列表。有关简单示例,请参阅:
答案 2 :(得分:0)
只要您使用docker网络的桥接模式并在该网络中创建容器,就可以立即使用服务发现。
一旦您的基础架构开始涉及分布在其上的多个服务器和微服务,您将需要从其他工具获得帮助。
Swarm是一个很好的工具,但是,如果我的生产负载涉及亚马逊等任何IaaS提供商,我想坚持领事。