得益于现代便捷的交通网络,不管是公路,铁路仍是飞机,咱们的出游变得十分便利。当数据畅游在容器世界中时,也会经历各式各样的网络。目前Windows容器支持 nat, overlay, transparent, l2bridge 和 l2tunnel。其中 l2tunnel 被用于Azure,不在本文的讨论范围内。接下来就来看看其它集中网络。docker
在开始介绍容器网络前,各位须要了解 Hyper-V 的虚拟交换机类型。Hyper-V 如今有三种虚拟交换机类型,外部,内部和专用。在容器网络中使用的是外部和内部。外部虚拟交换机将链接到容器主机的的物理网卡。而内部虚拟交换机会在本地建立虚拟网卡。windows
要查看当前计算机的容器网络,则能够经过运行 docker network ls 得到。服务器
C:\Users\greggu\vsrepos\posts $ docker network ls NETWORK ID NAME DRIVER SCOPE a5f85bc334db Default Switch ics local d2eb7fb1de63 External transparent local 4ea88ac7d5be nat nat local 76080eecc255 none null local
当容器引擎第一次运行时默认会建立名为nat的网络,该网络使用内部虚拟交换机及名为WinNAT的Windows系统组件。默认状况下,Windows上运行的容器将被链接到该网络,并从 172.16.0.0/16 网络中自动得到IP地址。在NAT网络中,容器到容器主机的端口转发/映射也是被支持的。网络
在容器启动时能够经过指定 --network 参数来链接到类型为 transparent 的网络,此时容器将经过Hyper-V外部交换机链接到物理网络,并从外部网络中的DHCP服务器中得到IP地址。也能够增长额外的--ip参数指定固定IP,可是须要注意的是目前Windows容器不支持--ip6参数。如下是启动容器时指定网络的一个例子。post
docker run -it --rm --name demo02 --network External greggu/demo02:0.0.1 cmd
当容器引擎运行在Swarm集群模式下时,容器会被链接到Overlay网络。链接到Overlay网络上的全部容器主机上的容器即可以相互通讯。Overlay网络能够经过插件和Kubernetes一块儿使用。目前支持的网络插件是Flannel和OVN。spa
当容器被链接到l2bridge网络时,将和容器主机使用相同IP网段。可是IP地址必须从容器主机网络中静态分配。且该网络模式下,容器主机上的全部容器将由于MAC地址重写功能和容器主机共享同一个MAC地址。插件