(二)學容器必須懂 bridge 網路
? 本節學習應用最廣泛也是默認的 bridge 網路,
? Docker 安裝時會創建一個 命名為 docker0 的 linux bridge,如果不指定--network,創建的容器默認都會掛到 docker0 上,
root@cuiyongchao:~# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.0242b316d415 no veth5693146
vethea16017
vethf263a23
root@cuiyongchao:~#
? 新創建一個容器,在docker0上新增的一個interface,一個新的網路介面 veth6825577被掛到了 docker0 上,veth6825577就是新創建容器的虛擬網卡,
root@cuiyongchao:~# docker run -d httpd
f02ffc0410f143cfc3065dc0210b28f4e745106eb097b4a4e2f2fde3993fce2d
root@cuiyongchao:~# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.0242b316d415 no veth5693146
veth6825577
vethea16017
vethf263a23
root@cuiyongchao:~#
? 下面看一下容器的網路配置,
root@cuiyongchao:~# docker run --name sili -it busybox
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:04
inet addr:172.17.0.4 Bcast:172.17.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6 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:516 (516.0 B) 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:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
/ #
? 容器有一個網卡 eth0,大家可能會問了,為什么不是brctl show查出來的vethab0efda 呢?
? 實際上 eth0 和vethab0efda 是一對 veth pair,veth pair 是一種成對出現的特殊網路設備,可以把它們想象成由一根虛擬網線連接起來的一對網卡,網卡的一頭(eth0)在容器中,另一頭(vethab0efda )掛在網橋 docker0上,其效果就是將eth0也掛在了 docker0 上,
? 我們還看到 eth0已經配置了 IP 172.17.0.2,為什么是這個網段呢?讓我們通過 docker network inspect bridge` 看一下 bridge 網路的配置資訊:
root@cuiyongchao:~# docker network inspect bridge
[
{
"Name": "bridge",
"Id": "aa9cc7a43b3f51e1d6f06ffbbb7f53843ad2379a5317a09388edcf7a35852853",
"Created": "2020-10-29T12:14:27.3344923Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
? 原來 bridge 網路配置的 subnet 就是 172.17.0.0/16,并且網關是 172.17.0.1,這個網關在哪兒呢?大概你已經猜出來了,就是 docker0,

? 容器創建時,docker 會自動從 172.17.0.0/16 中分配一個 IP,這里 16 位的掩碼保證有足夠多的 IP 可以供容器使用,
? 除了 none, host, bridge 這三個自動創建的網路,用戶也可以根據業務需要創建 user-defined 網路,下一節我們將詳細討論,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/222463.html
標籤:其他
