docker 中的覆盖网络和桥接网络有什么区别?



既然覆盖网络可以使多个隔离的docker deamon主机相互通信,为什么我们需要docker swarm中的桥接网络?谢谢!

检查此线程以了解概念。

接网络:网桥是 docker 中的默认网络,也称为 docker0。它是通过 NAT 防火墙桥接到主机连接到的物理的默认网络。但是,我们不关心它,因为所有容器都将连接到此网络并正常工作。

如果您有任何容器正在运行,则可以检查桥接网络:

$ docker network inspect bridge
"Containers": {
"145a2716d018c6fe8e9f93a81d88afd5a7437f0084ddb170c40761818e6d2f67": {
"Name": "nginx",
"EndpointID":   "ea6cfa433f41e21e572f17473c8e5f5e5d82e9f19646e66fe23abda20a3836b8",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
}
},

注意:您可以看到分配给来自 IPAM 配置子网的容器的自动 IP 地址。

考虑一下,您有多个 docker 主机运行容器,其中每个 docker 主机都有自己的内部专用桥接网络,允许容器相互通信,但是,主机中的容器无法相互通信,除非您在这些容器上发布端口并自己设置某种路由。这就是覆盖网络发挥作用的地方。使用 docker swarm,您可以创建一个覆盖网络,该网络将创建一个内部专用网络,该网络跨越参与 swarm 网络的所有节点,我们可以在创建服务时使用网络选项将容器或服务附加到该网络。因此,跨节点的容器可以通过此覆盖网络进行通信。

$ docker network create --driver overlay --subnet 10.0.9.0/24 overlay_network
$ docker service create --replicas 3 --network overlay_network nginx

希望这有帮助。

覆盖页面列出了它:

初始化群或将 Docker 主机加入现有群时,将在该 Docker 主机上创建两个新网络:

  • 一个名为ingress的覆盖网络,用于处理与群服务相关的控制和数据流量。创建群服务但不将其连接到用户定义的覆盖网络时,默认情况下它会连接到入口网络。
  • 一个名为docker_gwbridge的桥接网络,它将单个 Docker 守护进程连接到参与群的其他守护进程。

请参阅">它是如何工作的?码头工人!第2部分:群网络",塞巴斯蒂安·卡塞雷斯(Sebastian Caceres(:

覆盖
  • 网桥是 VXLAN 封装的覆盖网络的入口/出口点。
    它还将覆盖网络扩展到参与此特定覆盖网络的所有主机。
    每个主机上的每个覆盖网络子网都有一个,其名称与覆盖网络相同。
  • docker_gwbridge是离开群集的所有流量的出口网桥。
    每个主机只有一个docker_gwbridge。集装箱到集装箱的交通流不通过此桥。