docker 网桥详解

344 阅读3分钟

网桥是一个二层虚拟网络设备,把若干网络接口连接起来,各个网络之间的报文就可以相互转发了。

创建test1、test2二个容器

docker run -d --name test1 busybox /bin/sh -c "while true; do sleep 3600; done"

docker run -d --name test2 busybox /bin/sh -c "while true; do sleep 3600; done"

查看二个容器的ip

[root@gundy ~]# docker exec -it test1 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue 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
6: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
       
       
[root@gundy ~]# docker exec -it test2 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue 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
8: eth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
       

test1为172.17.0.2; test2为172.17.0.3

这二个容器的网络是相通的

[root@gundy ~]# docker exec -it test1 sh
/ # ping 172.17.0.3
PING 172.17.0.3 (172.17.0.3): 56 data bytes
64 bytes from 172.17.0.3: seq=0 ttl=64 time=0.118 ms
64 bytes from 172.17.0.3: seq=1 ttl=64 time=0.103 ms
64 bytes from 172.17.0.3: seq=2 ttl=64 time=0.092 ms
64 bytes from 172.17.0.3: seq=3 ttl=64 time=0.084 ms
64 bytes from 172.17.0.3: seq=4 ttl=64 time=0.087 ms
64 bytes from 172.17.0.3: seq=5 ttl=64 time=0.148 ms
64 bytes from 172.17.0.3: seq=6 ttl=64 time=0.088 ms
--- 172.17.0.3 ping statistics ---
7 packets transmitted, 7 packets received, 0% packet loss
round-trip min/avg/max = 0.084/0.102/0.148 ms

docker网络类型

[root@gundy ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
5080e21f821a   bridge    bridge    local
b869ad20472e   host      host      local
a8de1708c8ee   none      null      local

查看网络的详细信息 docker network inspect 5080e21f821a

查看网桥 首先安装brctl

yum install  bridge-utils

brtcl show

[root@gundy ~]# brctl  show
bridge name	bridge id		STP enabled	interfaces
docker0		8000.0242ce745ae0	no		vetha0461e6
							vethf7aa241

网桥的二个接口vetha0461e6, vethf7aa241

[root@gundy ~]# ip a
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 fq_codel state UP group default qlen 1000
    link/ether 00:16:3e:0c:20:db brd ff:ff:ff:ff:ff:ff
    inet 172.16.191.57/20 brd 172.16.191.255 scope global dynamic noprefixroute eth0
       valid_lft 276943540sec preferred_lft 276943540sec
    inet6 fe80::216:3eff:fe0c:20db/64 scope link
       valid_lft forever preferred_lft forever
5: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:ce:74:5a:e0 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:ceff:fe74:5ae0/64 scope link
       valid_lft forever preferred_lft forever
7: vethf7aa241@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
    link/ether e6:f6:df:ba:68:a8 brd ff:ff:ff:ff:ff:ff link-netnsid 2
    inet6 fe80::e4f6:dfff:feba:68a8/64 scope link
       valid_lft forever preferred_lft forever
11: vetha0461e6@if10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
    link/ether 1e:c3:d3:64:b4:e1 brd ff:ff:ff:ff:ff:ff link-netnsid 3
    inet6 fe80::1cc3:d3ff:fe64:b4e1/64 scope link
       valid_lft forever preferred_lft forever

示意图如下,二个容器通过Veth设备对分别跟网桥docker0连接。

image.png