docker容器之間網絡是如何通信的?

相關概念:

  • 網橋:相當於一個虛擬的交換機,連接在此網橋上的所有設備均可以正常通信;

  • veth pair:虛擬網卡對(2張網卡),兩張網卡之間的收發數據保持一致;

docker網絡:

docker0網橋:在安裝啓動完docker之後,會出現一個docker0的網卡設備(此設備相當於一個交換機);

創建docker容器後,會創建2個虛擬網卡,一端顯示在宿主機中,一端是容器中的eth0,這2張網卡是虛擬網卡對;


創建2個容器,在宿主機上執行ip a,可以看到會出現2個虛擬網卡(以veth開頭):

docker run -d --name nginx-1 nginx
docker run -d --name nginx-2 nginx

[root@ks-allinone ~]# ip a
...
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:92:a1:07:20 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:92ff:fea1:720/64 scope link 
       valid_lft forever preferred_lft forever
37: veth87e12aa@if36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    link/ether 56:3f:71:00:b2:95 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::543f:71ff:fe00:b295/64 scope link 
       valid_lft forever preferred_lft forever
39: vethed473fd@if38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    link/ether 66:f0:c4:e4:df:a9 brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet6 fe80::64f0:c4ff:fee4:dfa9/64 scope link 
       valid_lft forever preferred_lft forever

brctl show:可以看到這2個虛擬網卡都綁定在docker0上(相當於通過宿主機上的虛擬網卡連接在交換機(docker0)上)

[root@ks-allinone ~]# brctl show
bridge name	bridge id		STP enabled	interfaces
docker0		8000.024292a10720	no		veth87e12aa
							            vethed473fd

注:連接到同一個網橋上之後(相當於連接在同一個交換機上),容器之間就可以進行通信;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章