單主機(jī)容器網(wǎng)絡(luò)可能存在多個(gè)docker,分屬于不同的bridge,它們之間有通信的需求。其基礎(chǔ)的數(shù)據(jù)鏈路為:
下面進(jìn)行數(shù)據(jù)鏈路的分析。
一、環(huán)境信息:
- 系統(tǒng)環(huán)境
操作系統(tǒng)為ubuntu14.04;
Docker version 17.05.0-ce
- 查看容器網(wǎng)絡(luò):docker network list
NETWORK ID NAME DRIVER SCOPE
844c74ceea9d bridge bridge local
93b0f2d679ed docker_gwbridge bridge local
baa5b46a5057 host host local
852747e4d566 none null local
默認(rèn)提供bridge模式的容器網(wǎng)絡(luò)。
二、Docker基礎(chǔ)鏈路
- 啟動(dòng)docker服務(wù)后,一個(gè)名為docker0的Linux bridge被創(chuàng)建,默認(rèn)子網(wǎng)是172.17.0.0/16,docker0的地址是172.17.0.1。
(1)查詢網(wǎng)絡(luò)設(shè)備:ifconfig
docker0 Link encap:Ethernet HWaddr 02:42:93:6f:2e:4f
inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:93ff:fe6f:2e4f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:21 errors:0 dropped:0 overruns:0 frame:0
TX packets:48 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1204 (1.2 KB) TX bytes:6659 (6.6 KB)
eth0 Link encap:Ethernet HWaddr fa:16:3e:2e:6d:3f
inet addr:30.0.1.48 Bcast:30.0.1.255 Mask:255.255.255.0
inet6 addr: fe80::f816:3eff:fe2e:6d3f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1450 Metric:1
RX packets:28352 errors:0 dropped:0 overruns:0 frame:0
TX packets:23242 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:56315936 (56.3 MB) TX bytes:1637368 (1.6 MB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:480 (480.0 B) TX bytes:480 (480.0 B)
(2)查看容器網(wǎng)絡(luò)bridge的配置信息
docker network inspect bridge
[
{
"Name": "bridge",
"Id": "844c74ceea9d98cd31a7bb7c0298894cecf8ba1b175dc74824c3688490336a3c",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
}
}
]
- Docker會(huì)對(duì)從docker0流向外部的數(shù)據(jù)包進(jìn)行NAT操作。這樣就可以使得多個(gè)容器共享宿主機(jī)IP地址,與其他主機(jī)的實(shí)體進(jìn)行通信。
(1)查看路由:ip route
default via 30.0.1.1 dev eth0
30.0.1.0/24 dev eth0 proto kernel scope link src 30.0.1.48
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
說明:iproute2的ip route命令與net-tools的route命令類似。
(2)查看iptables規(guī)則鏈:iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DOCKER all -- anywhere anywhere ADDRTYPE match dst-type LOCAL
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DOCKER all -- anywhere !127.0.0.0/8 ADDRTYPE match dst-type LOCAL
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 172.17.0.0/16 anywhere
MASQUERADE all -- bogon/16 anywhere
Chain DOCKER (2 references)
target prot opt source destination
RETURN all -- anywhere anywhere
RETURN all -- anywhere anywhere
Docker的基礎(chǔ)鏈路信息為:
三、Docker的數(shù)據(jù)鏈路
1.單bridge
不指定網(wǎng)絡(luò)選項(xiàng)的情況下,創(chuàng)建新容器將默認(rèn)在docker0,IP地址為172.17.0.0/16的一個(gè)未使用地址,通常按順序分配,如172.17.0.2、172.17.0.3。
(1)啟busydox容器:docker run -it -d --name=box3 busybox
說明:busybox集成常用的linux命令和工具的軟件,適應(yīng)于資源有限的嵌入式系統(tǒng),可以看作精簡(jiǎn)版的shell。
(2)查看docker進(jìn)程:docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b2a846aef8c3 busybox "sh" 2 hours ago Up 2 hours
(3)進(jìn)入docker容器:docker exec -it b2a8 sh
/ # busybox ls
bin dev etc home proc root sys tmp usr var
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:02
inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:46 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:7996 (7.8 KiB) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
(4)訪問外網(wǎng):ping www.baidu.com。默認(rèn)情況下,連接到docker0上的容器可以進(jìn)行通信。
(5)刪除SNAT規(guī)則,以序號(hào)標(biāo)記查詢iptables規(guī)則,執(zhí)行:iptables -L -n --line-numbers
Chain PREROUTING (policy ACCEPT)
num target prot opt source destination
1 DOCKER all -- 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL
Chain INPUT (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 DOCKER all -- 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCAL
Chain POSTROUTING (policy ACCEPT)
num target prot opt source destination
6 MASQUERADE all -- 172.17.0.0/16 0.0.0.0/0
7 MASQUERADE all -- 172.18.0.0/16 0.0.0.0/0
Chain DOCKER (2 references)
num target prot opt source destination
1 RETURN all -- 0.0.0.0/0 0.0.0.0/0
2 RETURN all -- 0.0.0.0/0 0.0.0.0/0
這里可以看到POST ROUTING鏈,源地址為172.17.0.0,目的地址是任意地址。數(shù)據(jù)包通過這個(gè)鏈時(shí),便執(zhí)行了NAT操作。
刪除序號(hào)為6的規(guī)則(172.17.0.0/16):iptables -t nat -D POSTROUTING 6
Chain PREROUTING (policy ACCEPT)
num target prot opt source destination
1 DOCKER all -- 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL
Chain INPUT (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 DOCKER all -- 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCAL
Chain POSTROUTING (policy ACCEPT)
num target prot opt source destination
6 MASQUERADE all -- 172.18.0.0/16 0.0.0.0/0
Chain DOCKER (2 references)
num target prot opt source destination
1 RETURN all -- 0.0.0.0/0 0.0.0.0/0
2 RETURN all -- 0.0.0.0/0 0.0.0.0/0
說明:MASQUERADE與SNAT類似,可以從服務(wù)器的網(wǎng)卡上自動(dòng)獲取當(dāng)前ip地址來做NAT。
此時(shí),ping www.baidu.com,則無法訪問。
這樣,單個(gè)主機(jī)的Docker容器網(wǎng)絡(luò)為:
再新啟docker進(jìn)程,docker run -it -d --name=busybox1 busybox
Docker容器網(wǎng)絡(luò)為:
2.雙bridge
默認(rèn)情況下,連接到docker0上的容器可以進(jìn)行通信,但不同bridge上的容器是無法通信的。
(1)創(chuàng)建名為nwtest的bridge,子網(wǎng)為10.0.0.0/24
docker network create --driver=bridge --subnet=10.0.0.0/24 nwtest
(2)查看網(wǎng)絡(luò)設(shè)備:ifconfig
br-8d3ef22d71a6 Link encap:Ethernet HWaddr 02:42:11:0d:c7:67
inet addr:10.0.0.1 Bcast:0.0.0.0 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
docker0 Link encap:Ethernet HWaddr 02:42:c9:84:d8:fc
inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:c9ff:fe84:d8fc/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:27 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:4667 (4.6 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:480 (480.0 B) TX bytes:480 (480.0 B)
vethdb9a3fb Link encap:Ethernet HWaddr 7e:9c:93:1d:1d:81
inet6 addr: fe80::7c9c:93ff:fe1d:1d81/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:46 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:7996 (7.9 KB)
vethec487c4 Link encap:Ethernet HWaddr 6e:90:8e:40:5c:1d
inet6 addr: fe80::6c90:8eff:fe40:5c1d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:3399 (3.3 KB)
(3)查看docker網(wǎng)絡(luò):docker network list
NETWORK ID NAME DRIVER SCOPE
57d56a34c3c8 bridge bridge local
93b0f2d679ed docker_gwbridge bridge local
baa5b46a5057 host host local
852747e4d566 none null local
8d3ef22d71a6 nwtest bridge local
(4)新建Docker容器,執(zhí)行命令
dockerrun -it -d --network=nwtest --name=busybox6 busybox
(5)將容器busybox1關(guān)聯(lián)到網(wǎng)絡(luò)nwtest
dockernetwork connect nwtest busybox1
(5)容器busybox1執(zhí)行命令,測(cè)試是否能連通
docker exec -it 99f9 sh
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:02
inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:46 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:7996 (7.8 KiB) TX bytes:0 (0.0 B)
eth1 Link encap:Ethernet HWaddr 02:42:0A:00:00:03
inet addr:10.0.0.3 Bcast:0.0.0.0 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:19 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3398 (3.3 KiB) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
/ # ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2): 56 data bytes
64 bytes from 10.0.0.2: seq=0 ttl=64 time=0.952 ms
64 bytes from 10.0.0.2: seq=1 ttl=64 time=0.124 ms
64 bytes from 10.0.0.2: seq=2 ttl=64 time=0.188 ms
64 bytes from 10.0.0.2: seq=3 ttl=64 time=0.168 ms
64 bytes from 10.0.0.2: seq=4 ttl=64 time=0.186 ms
64 bytes from 10.0.0.2: seq=5 ttl=64 time=0.160 ms
綜上,Docker容器網(wǎng)絡(luò)的數(shù)據(jù)鏈路為:
-
容器
+關(guān)注
關(guān)注
0文章
504瀏覽量
22320 -
Bridge
+關(guān)注
關(guān)注
0文章
15瀏覽量
12021 -
Docker
+關(guān)注
關(guān)注
0文章
503瀏覽量
12539
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
Matlab仿真1090ES數(shù)據(jù)鏈路
如何利用Simulink進(jìn)行猝發(fā)通信系統(tǒng)數(shù)據(jù)鏈系統(tǒng)仿真設(shè)計(jì)?
武器數(shù)據(jù)鏈測(cè)試系統(tǒng)是什么組成的?
基于isoSPI數(shù)據(jù)鏈路的高可靠性車載電池系統(tǒng)設(shè)計(jì)
高級(jí)數(shù)據(jù)鏈路控制的操作方式是什么?
基于數(shù)據(jù)鏈路監(jiān)視的Ad Hoc網(wǎng)絡(luò)攻擊檢測(cè)機(jī)制
數(shù)據(jù)鏈路層的作用
數(shù)據(jù)鏈路協(xié)議,數(shù)據(jù)鏈路協(xié)議是什么意思
高級(jí)數(shù)據(jù)鏈路控制(HDLC)是什么意思
數(shù)據(jù)鏈路交換,什么是數(shù)據(jù)鏈路交換
工控軟件iFIX的數(shù)據(jù)鏈路結(jié)構(gòu)及其應(yīng)用

評(píng)論