我是Dockers和容器的新手。我正在浏览docker的教程,并发现了这些信息。 https://docs.docker.com/get-started/part3/#docker-composeyml
networks:
- webnet
networks:
webnet:
什么是网络?该文件说
指示Web容器通过称为webnet的负载平衡网络共享端口80。 (在内部,容器本身将在短暂的端口发布到Web的端口80.)
那么,默认情况下,覆盖网络在docker集群中是负载均衡的吗?什么是负载平衡算法使用?
实际上,我不清楚为什么我们在覆盖网络上进行负载平衡。
答案 0 :(得分:33)
不确定我是否比文档更清晰,但也许改写会有所帮助。
首先,您在此处关注的文档使用的是码头工具的swarm mode
。
什么是swarm mode
?
swarm是Docker引擎或节点的集群,您可以在其中部署服务。 Docker Engine CLI和API包括用于管理群集节点(例如,添加或删除节点)以及跨群集部署和协调服务的命令。
来自SO文档:
swarm是许多共同部署服务的Docker引擎(或节点)。 Swarm用于在许多物理,虚拟或云计算机上分发处理。
因此,使用swarm模式,您可以拥有一个多主机(vms和/或物理)群集,这些群集可以通过docker engine
相互通信。
<强> Q1。什么是网络?
webnet
是启动堆栈时创建的overlay network的名称。
覆盖网络管理参与群组的Docker守护程序之间的通信
在您的机器群集中,创建了一个虚拟网络,其中每个服务都有一个ip映射到内部DNS条目(即服务名称),并允许docker将传入的数据包路由到正确的容器,群(群集)。
<强> Q2。那么,默认情况下,覆盖网络在docker cluster中负载均衡?
是的,如果您使用覆盖网络,但您也可以删除服务networks
配置以绕过该网络。然后,您必须publish要公开的服务的端口。
<强> Q3。什么是负载平衡算法?
通过swarm master SO question回答的bmitch;):
该算法目前是循环法的,我没有看到它可以插入的迹象。更高级别的负载均衡器将允许将群集节点拆除进行维护,但任何粘性会话或其他路由功能都将通过循环模式中的循环算法撤消。
<强> Q4。实际上我不清楚为什么我们在覆盖网络上实现负载均衡
docker swarm模式/服务的目的是允许编排复制的服务,这意味着我们可以扩展/缩小在swarm中部署的容器。
再次来自docs:
Swarm模式有一个内部DNS组件,可以自动为swarm中的每个服务分配一个DNS条目。群集管理器使用内部负载平衡,根据服务的DNS名称在群集内的服务之间分发请求。
所以你可以像10个完全相同的容器一样部署(假设nginx和app app html / js),而不需要处理专用网络DNS条目,端口配置等等......任何传入的请求都会自动负载均衡到主机参与群体。
希望这有帮助!