docker網路模式
- 前言
- 一、容器網卡、網橋docker0、veth關系
- 二、docker的4種網路模式
- bridge模式
- host模式
- container模式
- none模式
前言
可以說每一次技術的革新都離不開最底層、最復雜也是最核心的兩個東西,那就是網路和存盤,不管是虛擬化還是容器化都與這兩點密不可分,本篇文章主要介紹docker網路模式,通信原理及優缺點
一、容器網卡、網橋docker0、veth關系
在介紹docker的4種網路模型之前,先介紹下容器內網卡與宿主機docker0關系,
Docker daemon啟動時會創建一個虛擬網橋設備 docker0(在主機上看來是一個網卡),默認地址為 172.17.1.1/16,容器啟動后都會被橋接到 docker0 上,并自動分配到一個 IP 地址,以此來實作網路通信,當然要確保docker0是啟動狀態,


當我們啟動容器時,ip地址會在docker0地址的基礎上遞增,第一個啟動的容器ip地址為172.100.100.2,第二個啟動的容器ip地址為172.100.100.3,以此類推

當我們啟動一個容器時,容器會創建一對虛擬網卡,也就是veth pair,一邊在主機上會出現一個veth開頭的虛擬網卡,另一邊在docker中生成eth0虛擬網卡,網卡只在該容器network namespace中可見,每一個宿主機的veth網卡都對應容器中的eth0網卡,veth網卡都橋接到docker0以此來實作網路通信,



二、docker的4種網路模式
| 模式 | 命令(docker run) | 簡述 |
|---|---|---|
| bridge模式 | –net=bridge | 容器默認模式,容器默認連接到docker0網橋上,通過iptables規則來實作通信 |
| host模式 | –net=host | 容器與主機共享網路,使用主機網卡埠等資訊 |
| container模式 | –net=container:NAME_or_ID | 容器與其他容器共享網路,使用已存在容器的網卡資訊,兩個容器通過lo回環網卡進行通信 |
| none模式 | –net=none | 無網卡資訊,用戶可根據自己需求自定義網路環境 |
bridge模式
橋接模式也是docker的默認網路模式,就像上述我們講到的容器網卡以及網橋的關系,就是講述的橋接模式的作業方式,這里不再贅述,

缺點:宿主機意外的其他主機無法與容器進行通信;
???容器的埠均需要在宿主機映射出來,所有的網路規則都通過nat轉發來實作,效率相對較低;
host模式
host模式容器可以直接使用宿主機的ip地址與外界通信,就像應用直接跑在主機上一樣,彌補了bridge模式的不足,

啟動一個容器查看容器的網卡資訊,結果與主機網卡資訊一致

缺點:網路環境隔離性差,容器不再擁有獨立的網路堆疊;
???容器與宿主機共享埠范圍,可能出現埠被占用情況;
container模式
container模式容器與容器共享網路堆疊,兩個容器可以更高效的通信


查看兩個容器的網卡配置發現一模一樣

其本質就是將一個容器network namespace加入了一個已存在容器的network namespace

缺點:與bridge模式一樣,宿主機意外的主機無法訪問到容器,
none模式
none模式是我們使用最少的,該模式除了lo網卡,其他網路設備均沒有定義,這種模式更傾向于開發者去開發新的網路模式,如host模式與container模式就是在此模式開發而來,


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/297678.html
標籤:其他
