文章目录
一、今天我们要搞明白的实验
如上红字所描述:同一个宿主机上的不同容器之间的网络如何互通的???
下面就一步一步探索答案!
二、前置网络知识
2.1、docker默认为我们创建的网络
我们安装完docker之后,docker daemon会为我们自动创建3个网络,如下:
~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
e71575e3722a bridge bridge local
ab8e3d45575c host host local
0c9b7c1134ff none null local
其实docker有4种网络通信模型,分别是:bridge、host、none、container
默认的使用的网络模型是bridge,也是我们生产上会使用到的网络模型。
下文中跟大家分享docker容器互通原理到时候呢,用到的也是bridge网络模型,另外如果你之前不了解也没关系,可以看下我下面的这篇文章补一下,不难,一看就懂!
2.2、怎么理解docker0网桥
另外,当我们安装完docker之后,docker会为我们创建一个叫docker0的网络设备
通过ifconfig
命令可以查看到它,看起来它貌似和eth0网络地位相当,像是一张网卡。然而并不是,docker0其实是一个Linux网桥
[root@vip ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:b4:97:ee brd ff:ff:ff:ff:ff:ff
inet 10.4.7.99/24 brd 10.4.7.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:feb4:97ee/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:db:fe:ff:db brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:dbff:fefe:ffdb/64 scope link
valid_lft forever preferred_lft forever
何以见得?可以通过下面的命令查看操作系统上的网桥信息
~]# yum install bridge-utils
~]# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.0242f0a8c0be no veth86e2ef2
vethf0a8bcb
那大家怎么理解Linux网桥的概念呢?
其实大家可以把docker0理解成一台虚拟的交换机!然后像下面这样类比着理解,就会豁然开朗
1、它好比是大学在机房上课时,老师旁边的那个大大的交换机设备。
2、把机房里的电脑都连接在交换机上,类比成docker 容器作为一台设备都连接着宿主机上的docker0。
3、把交换机和机房中的机器的ip在同一个网段,类比成docker0、和你启动的docker容器的ip也同属于172网段。
# docker0 ip是:
~]# ifconfig
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:db:fe:ff:db brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft foreve