一篇說(shuō)明白 Docker 四種網(wǎng)絡(luò)模式
今天給大家聊聊docker四種網(wǎng)絡(luò)模式,進(jìn)一步加深對(duì)docker技術(shù)的理解,歡迎大家一起來(lái)學(xué)習(xí)!
1、docker網(wǎng)絡(luò)模式分類(lèi)
docker run創(chuàng)建Docker容器時(shí),可以用--net選項(xiàng)指定容器的網(wǎng)絡(luò)模式,Docker主要有以下4種網(wǎng)絡(luò)模式。
- bridge模式:--net=bridge 如果不指定的話默認(rèn)設(shè)置。
- host模式:--net=host
- container模式:--net=container:NAME_or_ID
- none模式:--net=none
2、bridge 網(wǎng)橋模式
Docker安裝啟動(dòng)后會(huì)在宿主主機(jī)上創(chuàng)建一個(gè)名為 docker0 的虛擬網(wǎng)橋,處于七層網(wǎng)絡(luò)模型的數(shù)據(jù)鏈路層,后續(xù)每當(dāng)我們創(chuàng)建一個(gè)新的docker容器,在不指定容器網(wǎng)絡(luò)模式的情況下,docker會(huì)通過(guò) docker0 與主機(jī)的網(wǎng)絡(luò)連接,docker0 相當(dāng)于網(wǎng)橋。
使用 bridge 模式新創(chuàng)建的容器,容器內(nèi)部都會(huì)有一個(gè)虛擬網(wǎng)卡,名為 eth0,容器之間可以通過(guò)容器內(nèi)部的IP相互通信。
命令:
docker run -d -name tomcat01 --net=bridge -p 8085:80 tomcat:latest
說(shuō)明:
- --net=bridge 可省略 ,-p 指定端口映射。
- 網(wǎng)橋默認(rèn) IP 范圍是一般都是 172.17.x.x 。
3、host 模式
如果指定的host模式容器不會(huì)擁有一個(gè)獨(dú)立network namesace,而是與宿主主機(jī)共用network namesace。也就說(shuō)明容器本身不會(huì)有的網(wǎng)卡信息,而是使用宿主主機(jī)的網(wǎng)絡(luò)信息。容器除了網(wǎng)絡(luò),其他比如文件系統(tǒng)、進(jìn)程等依然都是隔離的。
說(shuō)明:
- --net=host 指定。
- 容器和宿主主機(jī)共享 Network namespace。
- host模式因?yàn)楹退拗髦鳈C(jī)共享network namespace,會(huì)有可能出現(xiàn)端口沖突的情況。
4、container模式
container模式和host模式很類(lèi)似,host模式和宿主主機(jī)共享network namespace;container模式和指定的容器共享,兩者之間除了網(wǎng)絡(luò)共享(網(wǎng)卡、主機(jī)名、IP 地址),其他方面還是隔離的。
命令:
docker run -d -name tomcat02 --net=container:name/id -p 8000:80 tomcat:latest
說(shuō)明:
–-net={容器id 或容器name} 指定。
當(dāng)前容器和另外一個(gè)容器共享 Network namespace。
5、none模式
如果dockers容器指定的網(wǎng)絡(luò)模式為none,該容器沒(méi)有辦法聯(lián)網(wǎng),外界也無(wú)法訪問(wèn)它,可以用來(lái)本次測(cè)試。
命令:
docker run -d -name tomcat02 --net=none -p 8000:80 tomcat:latest
-net=none 指定。
容器有獨(dú)立的Network namespace,但并沒(méi)有對(duì)其進(jìn)行任何網(wǎng)絡(luò)設(shè)置,如果需要的話,需要自定義配置網(wǎng)絡(luò)。