Docker默認(rèn)提供了一個(gè)隔離的內(nèi)網(wǎng)環(huán)境,啟動(dòng)Docker后會(huì)建立名為Docker0的虛擬網(wǎng)卡,所有的容器都連接到該虛擬網(wǎng)卡上,該虛擬網(wǎng)卡的IP為172.17.0.0網(wǎng)段。
在宿主機(jī)上執(zhí)行“ifconfig |more”命令,可以顯示當(dāng)前的網(wǎng)絡(luò)配置信息,其中的“docker0”欄中顯示所啟動(dòng)的虛擬機(jī)的IP信息,這和宿主機(jī)的IP并不在一個(gè)網(wǎng)段中。
“docker0”即虛擬網(wǎng)卡,其處于橋接模式,造成宿主機(jī)和虛擬機(jī)無法通訊。
雖然通過內(nèi)置NAT地址轉(zhuǎn)換,在啟動(dòng)Docker時(shí)將特定的端口映射到宿主機(jī)的對(duì)應(yīng)端口上,但是使用內(nèi)置的橋接模式,存在很多問題,例如在分配主機(jī)端口時(shí)比較困難容易沖突,每個(gè)容器暴露的端口都不一致,造成前端路由層Nginx配置中無法使用DNS的方式。
端口映射要在容器啟動(dòng)時(shí)就指定好,之后無法對(duì)其變更,而且NAT不支持WebSocket。
相比之下,利用自建橋接網(wǎng)絡(luò)的方式,可以讓每個(gè)容器都擁有獨(dú)立的IP,便于對(duì)外界提供服務(wù),即使每臺(tái)容器都使用相同的端口,因?yàn)楸舜说腎P不同,所以不會(huì)發(fā)生沖突,可以很好的解決以上難題。
執(zhí) 行“/etc/init.d/docker stop”命 令,停 止Docker服務(wù)。
執(zhí)行“ifconfig docker0 down”命令,將Docker的橋接網(wǎng)絡(luò)關(guān)閉。
執(zhí) 行“brctl dclbr docker0”命令,刪除Docker0橋接網(wǎng)絡(luò)。
執(zhí) 行“c d /e t c/s y s c o n f i g/n e t w o r kscripts/”命 令,進(jìn) 入 目標(biāo) 目 錄,執(zhí) 行“vi ifcfgeth0”命令,將其內(nèi)容修改 為“DEVICE=eth0”,“B O O T P R O T O=n o n e”,“ O N B O O T=y e s”,“T Y P E=E t h e r n e t”,“BOOTPROTO=static”,“BRIDGE="br0"等內(nèi)容,表示將“br0"橋接到“eth0”網(wǎng)卡上。
執(zhí)行“vi ifcfg-br0”命令,創(chuàng)建名為“br0”的網(wǎng)卡,其內(nèi)容為“DEVICE="br0"”,“O N B O O T=y e s”,“ N M_C O N T R O L L E D=n o”,“BOOTPROTO=static”,“ T Y P E=B r i d g e”,“IPADDR=192.168.1.97”,“NETMASK=255.255.255.0”,“GATEWAY=192.168.1.1”。
配置好所需的網(wǎng)卡后,執(zhí)行“/etc/init.d/network restart”命令,來重啟網(wǎng)絡(luò)。
執(zhí)行“ifconfig |more”命令,可以看到原來的“docker0”虛擬網(wǎng)卡消失,上面配置的“br0”橋接網(wǎng)卡出現(xiàn)了。
執(zhí) 行“v i /e t c/sysconfig/docker”命 令,在其中添加“other_args="-b=br0"”一行,表示使用“br0”橋接網(wǎng)絡(luò)。
執(zhí) 行“/etc/init.d/docker restart”命令,重啟Docker服務(wù)。
執(zhí) 行“ps -ef | grep docker”命 令,可 以 查 看Docker的進(jìn)程信息,其中顯示上述橋接網(wǎng)卡信息。
執(zhí) 行“docker images”命令,查看可用的鏡像信息。例如執(zhí)行“docker rund-I-t xxxxxx/centos/bin/bash -d”命令,在后臺(tái)啟動(dòng)對(duì)應(yīng)的容器,其中的“xxxxxx/centos”表示可用的鏡像。
執(zhí)行“docker ps”命令,可以查看當(dāng)前運(yùn)行的容器。
執(zhí) 行“docker attah xxxxxxxxxxxxx”命令,進(jìn)入指定的容器。
執(zhí)行“ifconfig |more”命令,顯示當(dāng)前容器的IP和和宿主機(jī)處于同樣的網(wǎng)段中。
執(zhí)行PING命令,對(duì)宿主機(jī)進(jìn)行探測(cè),是可以連通的。因?yàn)樗拗鳈C(jī)連接在Internet,所以該在容器內(nèi)是可以訪問外網(wǎng)的。
例如,執(zhí)行“yum install wget”命令,來安裝Wget工具,之后利用該工具來下載所需的文件。