上篇文章讲述了有关docker的资源控制,主要是三个方面:CPU、内存以及IO。本文将讲述docker的4种网络模式。
一、简述VMware中三种网络模式 可能,对于许多接触Linux操作系统的朋友而言,起初都是通过虚拟机软件进行层层深入的学习。而对于其中一种软件——VMware软件的网络连接可能就是初学者的一个难题。可能一直都并不了解所提供的三种网络模式的原理和意义。那么本小节将简单讲述一下有关VMware的三种网络模式:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)。而此三种分别对应于网卡设备中的VMnet0、VMnet1(或者后期新增创建的)、VMnet8(NAT网卡也只能有一个)
1.1桥接模式 概念:桥接模式就是一种将主机(好比是你的笔记本上的)的网卡与虚拟机的网卡利用虚拟网桥进行通信。
原理理解:对这种模式的理解可以认为是将物理机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,当然物理机也一样需要连接到这个交换机,也就是说桥接模式下的所有网卡都是交换模式,相互可以访问而且互不干扰。
典型特征:虚拟机的IP地址需要与主机在同一网段,如果需要联网则网关与DNS需要与主机网卡一致。
具体可以再通过下面的图示理解:
1.2网络地址转换模式 NAT模式的话相对来说应该是最熟悉的了。网络地址转换,既然有地址转换,肯定是发生了转变了。NAT模式就比较适合于IP资源紧缺,而且希望虚拟机可以联网的情况。
NAT模式借助的是虚拟的NAT设备以及虚拟的DHCP服务器,从而使得虚拟机可以联网。如下图所示:
1.3仅主机模式 仅主机模式呢,其实说白了就是没有NAT设备的网络模式,仅使用的是VMnet1虚拟网卡与虚拟交换机连接,从而与虚拟机通信,而这种模式就实现了虚拟机与外网的隔离,即独立的一台服务器,只与主机互相通信。如下图所示:
好的,现在大概了解了VMware中三种网络模式的原理了吧,现在继续来聊聊在docker中的网络模式。
二、docker的网络模式 2.1docker网络实现原理 docker使用Linux桥接的方式,即在宿主机虚拟一个docker容器网桥(docker0),docker启动一个 容器时会根据docker网桥的网段分配给容器一个IP地址,这个地址就是容器ip,同时docker就是每个容器的默认网关。因此,同一个宿主机内的容器就可以通过容器ip地址直接通信。
一般情况下,我们在安装和启动docker服务之后使用ifconfig命令即可查看到这个docker0的虚拟网桥设备:
[root@localhost ~]# ifconfig | head -7 docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255 ether 02:42:58:71:c9:ba txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0从上面显示的结果来看,默认的容器网关地址为172.17.0.1/16哈!当然loopback网卡是回环网卡,测试验证(TCP/IP连接),virtual bridge则是虚拟网桥(想想KVM【云原生】)
当然,docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法通过ip地址直接寻址的,这就表明我们需要通过其他的方式来使外部网络可以访问容器,一般会通过访问宿主机ip结合容器的端口(并且端口一般是进行了端口映射,之后会讲述)进行容器的访问。
2.2docker四种网络模式下面直接通过下面的表格来区分理解一下docker的四种网络模式
docker网络模式配置说明host 容器和宿主机共享Network namespace
container模式 容器和另外一个容器共享Network namespace
none模式 容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair 和网桥连接,配置IP等
bridge模式 默认的模式