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ò)模式可以通過啟動容器的時候指定,其命令或參數(shù)個數(shù)如下:
網(wǎng)絡(luò)模式 | 參數(shù) | 說明 |
---|---|---|
host模式 | -–net=host | 容器和宿主機共享 Network namespace。 |
container模式 | –-net={id} | 容器和另外一個容器共享 Network namespace。 kubernetes 中的pod就是多個容器共享一個 Network namespace。 |
none模式 | –-net=none | 容器有獨立的Network namespace,但并沒有對其進行任何網(wǎng)絡(luò)設(shè)置,如分配 veth pair 和網(wǎng)橋連接,配置IP等。 |
bridge模式 | -–net=bridge | 默認為該模式,通過 -p 指定端口映射。 |
這四種模式可以理解成 Docker 怎么虛擬化容器的網(wǎng)絡(luò),隔離程度和共享程度。
bridge 模式
使用 Docker 創(chuàng)建一個 bridge 模式的容器命令格式如下:
docker run -itd -p 8080:80 nginx:latest
bridge 模式稱為網(wǎng)橋模式,首先 Docker 會在主機上創(chuàng)建一個名為 docker0 的虛擬網(wǎng)橋,這個虛擬網(wǎng)絡(luò)處于七層網(wǎng)絡(luò)模型的數(shù)據(jù)鏈路層,每當創(chuàng)建一個新的容器時,容器都會通過 docker0 與主機的網(wǎng)絡(luò)連接,docker0 相當于網(wǎng)橋。
使用 bridge 模式新創(chuàng)建的容器,其內(nèi)部都有一個虛擬網(wǎng)卡,名為 eth0,容器之間可以通過 172.17.x.x 相互訪問。
一般情況下,網(wǎng)橋默認 IP 范圍是 172.17.x.x ,可以在宿主機執(zhí)行 ifpconfig 命令查看所有網(wǎng)卡,里面會包含 Docker 容器的虛擬網(wǎng)卡,可以查看某個容器的 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ò)與主機以及其他容器隔離,以太網(wǎng)接口、端口、路由表以及 DNS配置 都是獨立的。每個容器都好像是一個獨立的主機 ,這便是 bridge(網(wǎng)橋)的作用。但是因為 docker0 的存在,對于容器來說,可以通過 ip 訪問別的容器。
容器1 可以通過 172.17.0.3 訪問容器2,同樣,主機也可以使用這個 ip 訪問容器2 中的服務。
[Error] 提示
bridge 模式 是默認模式,即使是 使用
docker run -itd nginx:latest
命令啟動容器,也會創(chuàng)建一個虛擬 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 模式會讓容器與主機共享網(wǎng)絡(luò),此時映射的端口可能會生產(chǎn)沖突,但是容器的其余部分(文件系統(tǒng)、進程等)依然是隔離的,此時容器與宿主機共享網(wǎng)絡(luò)。
container 模式
container 模式可以讓多個容器之間相互通訊,即容器之間共享網(wǎng)絡(luò)。
首先啟動一個 A 容器,A 一般為 bridge 網(wǎng)絡(luò),接著 B 使用 –-net={id}
連接到 A 中,使用 A 的虛擬網(wǎng)卡,此時 A、B 共享網(wǎng)絡(luò),可以接著加入 B、C、D 等容器。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Docker構(gòu)建Maven+Tomcat基礎(chǔ)鏡像的實現(xiàn)
這篇文章主要介紹了Docker構(gòu)建Maven+Tomcat基礎(chǔ)鏡像的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-09-09win10中docker部署和運行countly-server的流程
這篇文章主要記錄一下windows10中使用docker容器安裝和部署countly-server的整個流程,本文給大家講解的非常詳細,具有一定的參考借鑒價值,需要的朋友參考下吧2019-11-11