Docker有四種網(wǎng)絡(luò)模式
(1)bridge:這是Docker默認(rèn)的網(wǎng)絡(luò)驅(qū)動(dòng),此模式會(huì)為每一個(gè)容器分配Network Namespace和設(shè)置IP等,并將容器連接到一個(gè)虛擬網(wǎng)橋上。如果未指定網(wǎng)絡(luò)驅(qū)動(dòng),這默認(rèn)使用此驅(qū)動(dòng)

(2)host:此網(wǎng)絡(luò)驅(qū)動(dòng)直接使用宿主機(jī)的網(wǎng)絡(luò)。

(3)none:此驅(qū)動(dòng)不構(gòu)造網(wǎng)絡(luò)環(huán)境。采用了none 網(wǎng)絡(luò)驅(qū)動(dòng),那么就只能使用loopback網(wǎng)絡(luò)設(shè)備,容器只能使用127.0.0.1的本機(jī)網(wǎng)絡(luò)。

(4)container:這個(gè)模式指定新創(chuàng)建的容器和已經(jīng)存在的一個(gè)容器共享一個(gè) Network Namespace,而不是和宿主機(jī)共享。新創(chuàng)建的容器不會(huì)創(chuàng)建自己的網(wǎng)卡,配置自己的 IP,而是和一個(gè)指定的容器共享 IP、端口范圍等。同樣,兩個(gè)容器除了網(wǎng)絡(luò)方面,其他的如文件系統(tǒng)、進(jìn)程列表等還是隔離的。兩個(gè)容器的進(jìn)程可以通過 lo 網(wǎng)卡設(shè)備通信。
在默認(rèn)情況,Docker使用bridge網(wǎng)絡(luò)模式,bridge網(wǎng)絡(luò)驅(qū)動(dòng)的示意圖如下,此文以bridge模式對(duì)Docker的網(wǎng)絡(luò)進(jìn)行說明。
1、bridge網(wǎng)絡(luò)的構(gòu)建過程如下
1)安裝Docker時(shí),創(chuàng)建一個(gè)名為docke0的虛擬網(wǎng)橋,虛擬網(wǎng)橋使用“10.0.0.0 -10.255.255.255 “、”172.16.0.0-172.31.255.255″和“192.168.0.0——192.168.255.255”這三個(gè)私有網(wǎng)絡(luò)的地址范圍。
?通過ifconfig 命令可以查看docker0網(wǎng)橋的信息:

?通過docker network inspect bridge 可以查看網(wǎng)橋的子網(wǎng)網(wǎng)絡(luò)范圍和網(wǎng)關(guān):
?2)運(yùn)行容器時(shí),在宿主機(jī)上創(chuàng)建虛擬網(wǎng)卡veth pair設(shè)備,veth

pair設(shè)備是成對(duì)出現(xiàn)的,從而組成一個(gè)數(shù)據(jù)通道,數(shù)據(jù)從一個(gè)設(shè)備進(jìn)入,就會(huì)從另一個(gè)設(shè)備出來。將veth pair設(shè)備的一端放在新創(chuàng)建的容器中,命名為eth0;另一端放在宿主機(jī)的docker0中,以veth為前綴的名字命名。通過 brctl show 命令查看放在docker0中的veth pair設(shè)備
#安裝brctl
[root@xuegod63 ~]# yum install bridge-utils -y
ifconfig

brctl show

2、?外部訪問
bridge的docker0是虛擬出來的網(wǎng)橋,因此無法被外部的網(wǎng)絡(luò)訪問。因此需要在運(yùn)行容器時(shí)通過-p和-P參數(shù)對(duì)將容器的端口映射到宿主機(jī)的端口。實(shí)際上Docker是采用 NAT的 方式,將容器內(nèi)部的服務(wù)監(jiān)聽端口與宿主機(jī)的某一個(gè)端口port 進(jìn)行綁定,使得宿主機(jī)外部可以將網(wǎng)絡(luò)報(bào)文發(fā)送至容器。
1)通過-P參數(shù),將容器的端口映射到宿主機(jī)的隨機(jī)端口:
$ docker run -P {images}
2)通過-p參數(shù),將容器的端口映射到宿主機(jī)的制定端口:
$ docker run -p {hostPort}:{containerPort}{images}
#docker運(yùn)行的時(shí)候指定網(wǎng)絡(luò)模式
--net