上一節(jié)我們討論了 none 和 host 類型的容器網(wǎng)絡(luò),本節(jié)學(xué)習(xí)應(yīng)用最廣泛也是默認(rèn)的 bridge 網(wǎng)絡(luò)。
Docker 安裝時(shí)會(huì)創(chuàng)建一個(gè) 命名為 docker0
的 linux bridge。如果不指定--network
,創(chuàng)建的容器默認(rèn)都會(huì)掛到 docker0
上。
當(dāng)前 docker0 上沒(méi)有任何其他網(wǎng)絡(luò)設(shè)備,我們創(chuàng)建一個(gè)容器看看有什么變化。
一個(gè)新的網(wǎng)絡(luò)接口 veth28c57df
被掛到了 docker0
上,veth28c57df
就是新創(chuàng)建容器的虛擬網(wǎng)卡。
下面看一下容器的網(wǎng)絡(luò)配置。
容器有一個(gè)網(wǎng)卡 eth0@if34
。大家可能會(huì)問(wèn)了,為什么不是veth28c57df
呢?
實(shí)際上 eth0@if34
和 veth28c57df
是一對(duì) veth pair。veth pair 是一種成對(duì)出現(xiàn)的特殊網(wǎng)絡(luò)設(shè)備,可以把它們想象成由一根虛擬網(wǎng)線連接起來(lái)的一對(duì)網(wǎng)卡,網(wǎng)卡的一頭(eth0@if34
)在容器中,另一頭(veth28c57df
)掛在網(wǎng)橋 docker0
上,其效果就是將 eth0@if34
也掛在了 docker0
上。
我們還看到 eth0@if34
已經(jīng)配置了 IP 172.17.0.2
,為什么是這個(gè)網(wǎng)段呢?讓我們通過(guò) docker network inspect bridge
看一下 bridge 網(wǎng)絡(luò)的配置信息:
原來(lái) bridge 網(wǎng)絡(luò)配置的 subnet 就是 172.17.0.0/16,并且網(wǎng)關(guān)是 172.17.0.1。這個(gè)網(wǎng)關(guān)在哪兒呢?大概你已經(jīng)猜出來(lái)了,就是 docker0。
當(dāng)前容器網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)如圖所示:
容器創(chuàng)建時(shí),docker 會(huì)自動(dòng)從 172.17.0.0/16 中分配一個(gè) IP,這里 16 位的掩碼保證有足夠多的 IP 可以供容器使用。
除了 none, host, bridge 這三個(gè)自動(dòng)創(chuàng)建的網(wǎng)絡(luò),用戶也可以根據(jù)業(yè)務(wù)需要?jiǎng)?chuàng)建 user-defined 網(wǎng)絡(luò),下一節(jié)我們將詳細(xì)討論。
http://www.cnblogs.com/CloudMan6/p/7066851.html