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

时间:2018-09-30 05:02:20

标签: docker docker-swarm

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

2 个答案:

答案 0 :(得分:2)

选中此thread,以从概念上理解。

桥接网络:桥接是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": ""
        }
    },

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

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

$ docker network create --driver overley --subnet 10.0.9.0/24 overley_network
$ docker service create --replicas 3 --network overley_network nginx

希望这会有所帮助。

答案 1 :(得分:1)

overlay page进行了布局:

  

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

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

参见 How does it work? Docker! Part 2: Swarm networking 的“ Sebastian Caceres”:

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