一、linux網橋和veth pair
1、linux網橋,虛擬的交換機,工作在資料鏈路層,通過學習到mac位址,將資料報**到網橋的不同埠上。
2、veth pair,可以理解為一根虛擬的網線,建立veth pair後,會以兩張虛擬網絡卡的形式成對出現,在其中乙個網絡卡發出的資料報,會直接出現在與它對應的另一張網絡卡上。
二、三種docker網路驅動
docker缺省會建立三種網路,分別為:none、host和bridge,可以通過命令docker network ls檢視
#1、none網路驅動docker network ls
network id name driver scope
948cb107a456 bridge bridge local
59932afae000 host host local
d16315c941e2 none null local
none,就是什麼都沒有,在建立容器時,指定引數—network=none,使用ifconfig命令檢視,可以看到只有lo的回環網絡卡。
#2、host網路驅動docker run -it --network=none busybox
/ #ifconfig
lo link encap:local loopback
inet addr:127.0.0.1 mask:255.0.0.0up loopback running mtu:65536 metric:1rx packets:0 errors:0 dropped:0 overruns:0 frame:0tx packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000rx bytes:0 (0.0 b) tx bytes:0 (0.0 b)
共享宿主機的網路棧,效能最佳,但是由於共享宿主機的網路棧,也共享了宿主機的網路埠資源。
在筆者的線上環境,為了網路效能,我們使用的就是host模式來部署zabbix server監控。
#3、bridge網路驅動docker run -it --network=host busybox
/ #ifconfig
docker0 link encap:ethernet hwaddr 02:42:44:c8:bf:47inet addr:172.17.0.1 bcast:172.17.255.255 mask:255.255.0.0up broadcast multicast mtu:1500 metric:1rx packets:100 errors:0 dropped:0 overruns:0 frame:0tx packets:100 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0rx bytes:7702 (7.5 kib) tx bytes:11897 (11.6kib)
eth0 link encap:ethernet hwaddr fa:16:3e:38:3c:a1
inet addr:10.30.20.87 bcast:10.30.20.255 mask:255.255.255.0up broadcast running multicast mtu:1500 metric:1rx packets:1016565 errors:0 dropped:0 overruns:0 frame:0tx packets:169554 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000rx bytes:289066541 (275.6 mib) tx bytes:35157980 (33.5mib)
lo link encap:local loopback
inet addr:127.0.0.1 mask:255.0.0.0up loopback running mtu:65536 metric:1rx packets:4 errors:0 dropped:0 overruns:0 frame:0tx packets:4 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000rx bytes:200 (200.0 b) tx bytes:200 (200.0 b)
docker服務啟動後,預設有乙個名為docker0的網絡卡,在宿主機上可以用ifconfig檢視到,分配的ip位址是172.17.0.1
#使用bridge建立容器,可以看到容器的eth0網絡卡分配的ip位址是172.17.0.2,閘道器是172.17.0.1ifconfig
docker0: flags=4163mtu 1500inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255ether 02:42:44:c8:bf:47 txqueuelen 0(ethernet)
rx packets 100 bytes 7702 (7.5kib)
rx errors 0 dropped 0 overruns 0 frame 0tx packets 100 bytes 11897 (11.6kib)
tx errors 0 dropped 0 overruns 0 carrier 0 collisions 0
#在宿主機上使用brctl show檢視,網橋docker0上「插入」了網絡卡vethc79f4a4,這個就是我們上面提到的veth pair,一端是vethc79f4a4接入網橋docker0,另一端就是容器裡的eth0網絡卡docker run -it --network=bridge busybox
/ #ifconfig
eth0 link encap:ethernet hwaddr 02:42:ac:11:00:02inet addr:172.17.0.2 bcast:172.17.255.255 mask:255.255.0.0up broadcast running multicast mtu:1500 metric:1rx packets:0 errors:0 dropped:0 overruns:0 frame:0tx packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0rx bytes:0 (0.0 b) tx bytes:0 (0.0b)
……/ #
route -n
kernel ip routing table
destination gateway genmask flags metric ref use iface
0.0.0.0 172.17.0.1 0.0.0.0 ug 0 0 0eth0
172.17.0.0 0.0.0.0 255.255.0.0 u 0 0 0 eth0
#為什麼docker0分配的ip位址是172.17.0.1?brctl show
bridge name bridge id stp enabled inte***ces
docker0 8000.024244c8bf47 no vethc79f4a4
#ifconfig vethc79f4a4
vethc79f4a4: flags=4163mtu 1500ether 3e:d7:34:58:8b:ea txqueuelen 0(ethernet)
rx packets 0 bytes 0 (0.0b)
rx errors 0 dropped 0 overruns 0 frame 0tx packets 0 bytes 0 (0.0b)
tx errors 0 dropped 0 overruns 0 carrier 0 collisions 0
#我們可以檢視docker0分配的網段是172.17.0.0/16docker network inspect bridge
……
"config
": [
……
最終使用網橋建立的容器的網路架構圖如下
Docker 容器網路
所有容器建立時,預設都掛在docker0上,可以在宿主機上使用ifconfig檢視docker0網橋裝置。docker0是乙個linux bridge。docker0網路建立時預設配置了subnet 172.17.0.0 16 建立bridge docker network create drive...
Docker容器網路
docker容器的網路驅動有很多種方式,當安裝docker engine後,docker會在每乙個engine上面生成乙個3種網路,通過命令可以看到是bridge,host和none,而docker官方推薦使用者使用自己的自定義網路,所以在使用容器的時候最好使用自定義的網路,預設docker使用自帶...
容器網路 為docker容器新增網路介面
一 背景 預設情況下容器啟動後只有乙個網路介面,一般外圍為eth0,且其ip位址已經提前分配。有時候我們希望為乙個容器建立多個網路介面,此時可以嘗試如下的方式。二 為容器新增網路介面 1 以預設的網路方式執行乙個容器 docker run name tst add inf it tst img bi...