让Docker容器通过Docker虚拟网络运行并相互通信而不是简单地通过主机彼此通信有哪些优点?假设我有通过主机上的端口8000(-p 8000:8000)暴露的容器A和通过主机上的端口9000(-p 9000:9000)暴露的容器B。容器A可以通过host.docker.internal:9000
与容器B进行通信,但是,如果它们部署在同一Docker网络中,则A可以简单地通过<name of container B>:9000
与B进行通信。在我看来,后者显然更整洁,但除此之外,它还有什么好处?
答案 0 :(得分:2)
安全性。 通过创建仅内部Docker服务可访问的专用网络,您可以为攻击进行准备。常见的体系结构是
-pub---> PROXY --priv---> MAIN SERVICE --priv--> DATABASE
仅代理需要公开给公共(主机)网络接口。所有这三种服务都可以成为内部流量发生的专用网络的一部分。
简化。
专用网络流量被认为是“受信任的”,因此不需要SSL证书(HTTPS),并且使每个服务都实现SSL / TLS验证。
它通常也(或应该总是)比面向公众的网络快得多,这意味着无需在网络上使用某些优化(压缩或其他压缩方案,缓存)。
多虚拟机 当服务跨越多个VM时,它们通常不绑定到特定VM。这使得组件(容器,任务等)甚至可以由协调器(Kubernetes,Mesos等)移动到不同或新的VM。服务之间的通信通过跨所有VM的专用(覆盖)网络完成。这样,您的服务只需要按名称引用其他服务,然后让协调器正确地重新路由即可。