docker系列教程04---容器网络
一、Docker不启动时默认的网络情况
这里先把Docker停掉了,然后咱们ifconfig看一眼:
ifconfig
ens33不用多说了,lo为回环。这里可能还会有一个virbr0,在CentOS7的安装过程中如果有选择相关虚拟化的的服务安装系统后,启动网卡时会发现有一个以网桥连接的私网地址的virbr0网卡(virbr0网卡:它还有一个固定的默认IP地址192.168.122.1),是做虚拟机网桥的使用的,其作用是为连接其上的虚机网卡提供 NAT访问外网的功能。当然你也可以选择把它删了,命令如下:
yum remove libvirt-libs.x86_64
二、Docker启动时的网络情况
ifconfig
这时候docker0这个虚拟网桥就冒出来了。 这里有一点可以稍微一下它的ip是172.17.0.1但是它的掩码是255.255.0.0也就是16。负责容器间的互联和通信以及端口映射
三、常用基本命令
查看网络
docker network ls
创建网络默认为bridge模式
docker network create van
查看网络数据源
docker network inspect bridge
将正在运行的容器连接到网络
docker network connect 网络名 正在运行的容器
启动时将容器连接到网络
docker run -itd --network=网络名 即将启动的容器
指定容器的IP地址
docker network connect --ip 10.10.10.10 网络名 容器
四、网络模式
1、bridge
为每一个容器分配、设置IP等,并将容器连接到docker0的虚拟网桥。若没有特别申明,则为默认自带一个IP以及网络设置。(一人一个)
Docker服务默认会创建一个 docker0网桥(其上有一个 docker0 内部接口),该桥接网络的名称为docker0,它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。Docker默认指定了 docker0 接口 的 IP 地址和子网掩码,让主机和容器之间可以通过网桥相互通信。可以看一眼默认的网桥名:
docker network inspect bridge | grep name
可以看到默认的网桥名字就叫docker0。
下面来讲讲理论:
1 Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。
2 docker run 的时候,没有指定network的话默认使用的网桥模式就是bridge,使用的就是docker0。在宿主机ifconfig,就可以看到docker0和自己create的network(后面讲)eth0,eth1,eth2……代表网卡一,网卡二,网卡三……,lo代表127.0.0.1,即localhost,inet addr用来表示网卡的IP地址
3 网桥docker0创建一对对等虚拟设备接口一个叫veth,另一个叫eth0,成对匹配。
3.1 整个宿主机的网桥模式都是docker0,类似一个交换机有一堆接口,每个接口叫veth,在本地主机和容器内分别创建一个虚拟接口,并让他们彼此联通(这样一对接口叫veth pair);
3.2 每个容器实例内部也有一块网卡,每个接口叫eth0;
3.3 docker0上面的每个veth匹配某个容器实例内部的eth0,两两配对,一一匹配。
通过上述,将宿主机上的所有容器都连接到这个内部网络上,两个容器在同一个网络下,会从这个网关下各自拿到分配的ip,此时两个容器的网络是互通的。
说白了, docker0 bridge 就相当于一个交换机。它用于把宿主机的ens33网卡和上面的容器虚拟网卡进行连接,让其可以进行联网通信。而docker0的IP地址就是上层容器的网关。上图中红框所标出的就类似于进行连接的RJ45水晶头。eth0就相当于是容器中虚拟出的网卡接口,veth相当于交换机上的接口。接下来咱们去容器实例中去看看他们的对印关系
2、host
容器不会虚拟出自己的网卡、IP等,而是使用宿主机的IP和端口。(多人一个)
3、none
容器有自己独立的Network namespace,但是没有进行任何的相关配置。(有,但是空的)
五、使用自定义网络
自定义网络新建时默认依旧是bridge模式,我们先来新建一个van♂的网络:
可以看到它的驱动模式默认还是bridge。
docker network create van_network
自定义网络本身就维护好了主机名和IP的对应关系,也就是IP和域名都能联通