none 和 host 網絡的適用場景 - 每天5分鐘玩轉 Docker 容器技術(31)
本章開始討論 Docker 網絡。
我們會首先學習 Docker 提供的幾種原生網絡,以及如何創建自定義網絡。然後探討容器之間如何通信,以及容器與外界如何交互。
Docker 網絡從覆蓋範圍可分為單個 host 上的容器網絡和跨多個 host 的網絡,本章重點討論前一種。對於更為復雜的多 host 容器網絡,我們會在後面進階技術章節單獨討論。
Docker 安裝時會自動在 host 上創建三個網絡,我們可用 docker network ls
命令查看:
下面我們分別討論它們。
none 網絡
故名思議,none 網絡就是什麽都沒有的網絡。掛在這個網絡下的容器除了 lo,沒有其他任何網卡。容器創建時,可以通過 --network=none
指定使用 none 網絡。
我們不禁會問,這樣一個封閉的網絡有什麽用呢?
其實還真有應用場景。封閉意味著隔離,一些對安全性要求高並且不需要聯網的應用可以使用 none 網絡。
比如某個容器的唯一用途是生成隨機密碼,就可以放到 none 網絡中避免密碼被竊取。
當然大部分容器是需要網絡的,我們接著看 host 網絡。
host 網絡
連接到 host 網絡的容器共享 Docker host 的網絡棧,容器的網絡配置與 host 完全一樣。可以通過 --network=host
指定使用 host 網絡。
在容器中可以看到 host 的所有網卡,並且連 hostname 也是 host 的。host 網絡的使用場景又是什麽呢?
直接使用 Docker host 的網絡最大的好處就是性能,如果容器對網絡傳輸效率有較高要求,則可以選擇 host 網絡。當然不便之處就是犧牲一些靈活性,比如要考慮端口沖突問題,Docker host 上已經使用的端口就不能再用了。
Docker host 的另一個用途是讓容器可以直接配置 host 網路。比如某些跨 host 的網絡解決方案,其本身也是以容器方式運行的,這些方案需要對網絡進行配置,比如管理 iptables,大家將會在後面進階技術章節看到。
下一節討論應用更廣的 bridge 網絡。
none 和 host 網絡的適用場景 - 每天5分鐘玩轉 Docker 容器技術(31)