docker网络

一、四种网络模式(内容出处)

1. bridge模式

1.1 实现方式

docker默认模式,此模式会为每个容器分配一个独立的network namespace。docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器通过交换机连在了一个二层网络中。

1.2 工作方式

从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备,Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中。可以通过brctl show命令查看。

1.3 bridge模式架构图

2. host模式

2.1 实现方式

使用host模式启动docker容器时,docker容器不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置的ip等,而是使用宿主机的IP和端口。 容器的其它方面,如文件系统、进程列表等还是和宿主机隔离的。

2.2 工作方式

使用宿主机的网络

2.3 host模式架构

3. container模式

3.1 实现方式

这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过 lo 网卡设备通信。

3.2 工作方式

和bridge模式相同

3.3 架构图

4. none模式

4.1 实现方式

使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。

4.2 工作方式

4.3 架构图

三、跨主机通信(内容出处)

1. nat方式

NAT就是传统的docker网络,利用宿主机的IP和Iptables来达到容器,主机之间的通信。容器对外IP都是宿主机的IP,NAT的性能损耗比较大。但只要宿主机之间三层IP可达,容器之间就可以通信,比较普适。

2. Tunnel(overlay)方式

VPN,ipip,VXLAN等都是tunnel计算机,简单讲就是在容器的数据包间封装一层或多层其他的数据协议头,达到连通的效果。
Docker的Libnetwork就支持vxlan的overlay方式,weave也支持UDP和Vxlan的overlay模式,flannel,calico等都支持overlay模式。
Overlay一般通过vSwitch来实现,比如OVS
一般需要一个全局的KV store(sdn controller、etcd、consul)来保存控制信息。
这种方式一般也是只需要三层可达,容器就能互通,比较普适。overlay模式容器有独立IP,性能上一般会比NAT好,不同overlay方案之间的差别也是很大的。

3. 路由模式

路由方案主要是通过路由设置的方式让容器对容器,容器对宿主机之间相通信。例如:calico的BGP路由方案(非IPIP)。这种方式一般适用于单个数据中心,最常见的是同一个vlan中使用,如果不是,需要设置路由规则。路由方案性能损耗少,和主机网络性能比较接近。

4. 桥接方式

大二层就是将物理网卡和容器网络桥接到同一个linux bridge。容器网络可以直接接入该linux bridge,也可以将容器网络接入容器网桥docker0,再把docker0桥接到linux bridge上。目的是使得容器网络和宿主机网络在同一个二层网络。

四、参考博文

1. 官网资料

https://docs.docker.com/network/

2. 跨主机通信

https://zhuanlan.zhihu.com/p/24094454
http://blog.csdn.net/ztsinghua/article/details/51545561

3. docker网络模式

http://www.a-site.cn/article/169899.html
https://www.cnblogs.com/frankielf0921/p/5822699.html
https://www.cnblogs.com/yy-cxd/p/6553624.html
http://f.dataguru.cn/thread-576199-1-2.html
http://blog.csdn.net/gamer_gyt/article/details/54861970

Previous Post

dockerCE常用操作

Next Post

docker存储

Related Posts