您好,登錄后才能下訂單哦!
這篇文章主要介紹“Docker的四種網絡模式是什么”,在日常操作中,相信很多人在Docker的四種網絡模式是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Docker的四種網絡模式是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
Docker 有 bridge、none、host、container 四種網絡模式,提供網絡隔離、端口映射、容器間互通網絡等各種支持,下面開門見山地直接介紹這四種網絡模式。
這四種網絡模式可以通過啟動容器的時候指定,其命令或參數個數如下:
網絡模式 | 參數 | 說明 |
---|---|---|
host模式 | -–net=host | 容器和宿主機共享 Network namespace。 |
container模式 | –-net={id} | 容器和另外一個容器共享 Network namespace。 kubernetes 中的pod就是多個容器共享一個 Network namespace。 |
none模式 | –-net=none | 容器有獨立的Network namespace,但并沒有對其進行任何網絡設置,如分配 veth pair 和網橋連接,配置IP等。 |
bridge模式 | -–net=bridge | 默認為該模式,通過 -p 指定端口映射。 |
這四種模式可以理解成 Docker 怎么虛擬化容器的網絡,隔離程度和共享程度。
使用 Docker 創建一個 bridge 模式的容器命令格式如下:
docker run -itd -p 8080:80 nginx:latest
bridge 模式稱為網橋模式,首先 Docker 會在主機上創建一個名為 docker0 的虛擬網橋,這個虛擬網絡處于七層網絡模型的數據鏈路層,每當創建一個新的容器時,容器都會通過 docker0 與主機的網絡連接,docker0 相當于網橋。
使用 bridge 模式新創建的容器,其內部都有一個虛擬網卡,名為 eth0,容器之間可以通過 172.17.x.x 相互訪問。
一般情況下,網橋默認 IP 范圍是 172.17.x.x ,可以在宿主機執行 ifpconfig 命令查看所有網卡,里面會包含 Docker 容器的虛擬網卡,可以查看某個容器的 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 創建的容器,其網絡與主機以及其他容器隔離,以太網接口、端口、路由表以及 DNS配置 都是獨立的。每個容器都好像是一個獨立的主機 ,這便是 bridge(網橋)的作用。但是因為 docker0 的存在,對于容器來說,可以通過 ip 訪問別的容器。
容器1 可以通過 172.17.0.3 訪問容器2,同樣,主機也可以使用這個 ip 訪問容器2 中的服務。
[Error] 提示
bridge 模式 是默認模式,即使是 使用
docker run -itd nginx:latest
命令啟動容器,也會創建一個虛擬 IP。
這種網絡模式下容器只有 lo 回環網絡,沒有其他網卡,這種類型的網絡沒有辦法聯網,外界也無法訪問它,封閉的網絡能很好地保證容器的安全性。
創建 none 網絡的容器:
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 模式會讓容器與主機共享網絡,此時映射的端口可能會生產沖突,但是容器的其余部分(文件系統、進程等)依然是隔離的,此時容器與宿主機共享網絡。
container 模式可以讓多個容器之間相互通訊,即容器之間共享網絡。
首先啟動一個 A 容器,A 一般為 bridge 網絡,接著 B 使用 –-net={id}
連接到 A 中,使用 A 的虛擬網卡,此時 A、B 共享網絡,可以接著加入 B、C、D 等容器。
到此,關于“Docker的四種網絡模式是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。