Docker的四種網(wǎng)絡(luò)模式
Docker 的四種網(wǎng)絡(luò)模式
Docker 有 bridge、none、host、container 四種網(wǎng)絡(luò)模式,提供網(wǎng)絡(luò)隔離、端口映射、容器間互通網(wǎng)絡(luò)等各種支持,下面開門見山地直接介紹這四種網(wǎng)絡(luò)模式。
這四種網(wǎng)絡(luò)模式可以通過啟動(dòng)容器的時(shí)候指定,其命令或參數(shù)個(gè)數(shù)如下:
網(wǎng)絡(luò)模式 | 參數(shù) | 說明 |
---|---|---|
host模式 | -–net=host | 容器和宿主機(jī)共享 Network namespace。 |
container模式 | –-net={id} | 容器和另外一個(gè)容器共享 Network namespace。 kubernetes 中的pod就是多個(gè)容器共享一個(gè) Network namespace。 |
none模式 | –-net=none | 容器有獨(dú)立的Network namespace,但并沒有對(duì)其進(jìn)行任何網(wǎng)絡(luò)設(shè)置,如分配 veth pair 和網(wǎng)橋連接,配置IP等。 |
bridge模式 | -–net=bridge | 默認(rèn)為該模式,通過 -p 指定端口映射。 |
這四種模式可以理解成 Docker 怎么虛擬化容器的網(wǎng)絡(luò),隔離程度和共享程度。
bridge 模式
使用 Docker 創(chuàng)建一個(gè) bridge 模式的容器命令格式如下:
docker run -itd -p 8080:80 nginx:latest
bridge 模式稱為網(wǎng)橋模式,首先 Docker 會(huì)在主機(jī)上創(chuàng)建一個(gè)名為 docker0 的虛擬網(wǎng)橋,這個(gè)虛擬網(wǎng)絡(luò)處于七層網(wǎng)絡(luò)模型的數(shù)據(jù)鏈路層,每當(dāng)創(chuàng)建一個(gè)新的容器時(shí),容器都會(huì)通過 docker0 與主機(jī)的網(wǎng)絡(luò)連接,docker0 相當(dāng)于網(wǎng)橋。
使用 bridge 模式新創(chuàng)建的容器,其內(nèi)部都有一個(gè)虛擬網(wǎng)卡,名為 eth0,容器之間可以通過 172.17.x.x 相互訪問。
一般情況下,網(wǎng)橋默認(rèn) IP 范圍是 172.17.x.x ,可以在宿主機(jī)執(zhí)行 ifpconfig 命令查看所有網(wǎng)卡,里面會(huì)包含 Docker 容器的虛擬網(wǎng)卡,可以查看某個(gè)容器的 ip。在容器中,也可以使用 ifconfig 命令查看自身的容器 ip:
root@cda6958393cb:/var# ./ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255 ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet) RX packets 347 bytes 9507996 (9.5 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 278 bytes 22384 (22.3 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
可以看到,此容器的 ip 是 172.17.0.2。
使用了 bride 創(chuàng)建的容器,其網(wǎng)絡(luò)與主機(jī)以及其他容器隔離,以太網(wǎng)接口、端口、路由表以及 DNS配置 都是獨(dú)立的。每個(gè)容器都好像是一個(gè)獨(dú)立的主機(jī) ,這便是 bridge(網(wǎng)橋)的作用。但是因?yàn)?docker0 的存在,對(duì)于容器來說,可以通過 ip 訪問別的容器。
容器1 可以通過 172.17.0.3 訪問容器2,同樣,主機(jī)也可以使用這個(gè) ip 訪問容器2 中的服務(wù)。
[Error] 提示
bridge 模式 是默認(rèn)模式,即使是 使用
docker run -itd nginx:latest
命令啟動(dòng)容器,也會(huì)創(chuàng)建一個(gè)虛擬 IP。
none 模式
這種網(wǎng)絡(luò)模式下容器只有 lo 回環(huán)網(wǎng)絡(luò),沒有其他網(wǎng)卡,這種類型的網(wǎng)絡(luò)沒有辦法聯(lián)網(wǎng),外界也無法訪問它,封閉的網(wǎng)絡(luò)能很好地保證容器的安全性。
創(chuàng)建 none 網(wǎng)絡(luò)的容器:
docker run -itd --net=none nginx:latest
root@5a67da130f62:/var# ./ifconfig lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
host 模式
host 模式會(huì)讓容器與主機(jī)共享網(wǎng)絡(luò),此時(shí)映射的端口可能會(huì)生產(chǎn)沖突,但是容器的其余部分(文件系統(tǒng)、進(jìn)程等)依然是隔離的,此時(shí)容器與宿主機(jī)共享網(wǎng)絡(luò)。
container 模式
container 模式可以讓多個(gè)容器之間相互通訊,即容器之間共享網(wǎng)絡(luò)。
首先啟動(dòng)一個(gè) A 容器,A 一般為 bridge 網(wǎng)絡(luò),接著 B 使用 –-net={id}
連接到 A 中,使用 A 的虛擬網(wǎng)卡,此時(shí) A、B 共享網(wǎng)絡(luò),可以接著加入 B、C、D 等容器。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Docker沒有啟動(dòng)環(huán)境變量的問題解決
在使用Docker容器時(shí),有時(shí)候我們會(huì)遇到一個(gè)問題,就是在容器中沒有啟動(dòng)環(huán)境變量,本文主要介紹了Docker沒有啟動(dòng)環(huán)境變量的問題解決,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02Docker構(gòu)建Maven+Tomcat基礎(chǔ)鏡像的實(shí)現(xiàn)
這篇文章主要介紹了Docker構(gòu)建Maven+Tomcat基礎(chǔ)鏡像的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09Docker中部署Redis集群與部署微服務(wù)項(xiàng)目的詳細(xì)過程
這篇文章主要介紹了Docker中部署Redis集群與部署微服務(wù)項(xiàng)目,主要包括使用docker部署的好處以及Docker與Kubernetes對(duì)比分析,需要的朋友可以參考下2022-06-06win10中docker部署和運(yùn)行countly-server的流程
這篇文章主要記錄一下windows10中使用docker容器安裝和部署countly-server的整個(gè)流程,本文給大家講解的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2019-11-11Docker部署.NET6項(xiàng)目的實(shí)現(xiàn)步驟
Docker是現(xiàn)在比較流行的開源容器引擎,有了它讓我們部署和維護(hù)系統(tǒng)更加方便,本文主要介紹了Docker部署.NET6項(xiàng)目,具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12Docker將鏡像文件發(fā)布到阿里云的詳細(xì)過程
這篇文章主要介紹了Docker將鏡像文件發(fā)布到阿里云的操作,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05