文章目錄
- 1. bridge(默認)
- 2. host
- 3. none
- 4. container
- 5. overlay
- 6. macvlan
- 7. 總結對比
Docker 六種網絡模式是容器網絡的基礎概念,不同模式決定容器與宿主機、外部網絡、其他容器之間的通信方式。
1. bridge(默認)
Bridge模式:容器界的"小區共享Wi-Fi"。
容器連接到 docker0 網橋,通過 NAT 方式與外部通信。
當你運行docker run nginx時,Docker默認會把容器接入這個"小區共享網絡"。所有容器通過docker0虛擬網橋互相串門,就像住戶共享路由器——容器172.17.0.2想訪問172.17.0.3?直接喊名字就行(容器名DNS解析)。但要從外網訪問,得通過-p 8080:80這種"快遞柜"(端口映射),不然外賣員可找不到你家。
特點:
-
每個容器有獨立 IP(172.17.x.x)。
-
宿主機通過 docker0 轉發數據包。
-
默認 docker run 就是這種模式。
為什么默認bridge模式下容器IP總變?
因為Docker像小區物業,每次重啟容器都可能換"門牌號"。解決辦法:docker network create my_bridge創建自定義網橋,穩定性堪比買產權房。
命令示例:
docker run -d --name web --network bridge nginx
2. host
容器直接使用宿主機的網絡棧,不再分配獨立的 IP。
性能狂魔的"裸奔"選擇
直接把宿主機的網絡棧"借"給容器用——沒有NAT轉發,沒有虛擬網卡,容器端口直接暴露在主機IP上。就像把家里電器直接接到市政電網,省電但危險:兩個容器都想用80端口?對不起,后啟動的直接"跳閘"(端口沖突)。
特點:
-
網絡性能最好(無 NAT)。
-
容器內服務端口與宿主機端口沖突。
-
常用于需要高性能或與宿主機緊密耦合的服務。
命令示例:
docker run -d --network host nginx
3. none
容器有獨立的網絡命名空間,但不做任何網絡配置。
與世隔絕的"安全屋"
啟動容器時加–net=none,Docker會給它建個獨立網絡命名空間,但啥都不配置——沒有IP,沒有網關,只有一個孤零零的lo接口。就像把服務器關進法拉第籠,物理隔絕網絡攻擊。
手動配置網絡
特點:
-
沒有網卡、IP、路由。
-
只能通過 ip link 手動配置。
-
常用于自定義網絡場景或安全隔離。
命令示例:
docker run -d --network none busybox sleep 3600
適合存放密鑰的容器,或者需要手動搭建VPN隧道的場景——安全到連自己都可能忘記怎么進去。
4. container
讓新容器與已存在的容器共享網絡命名空間。
容器界的"合租室友"
讓新容器共享已有容器的網絡命名空間,相當于兩個室友共用一個WiFi賬號和IP。比如前端容器和后端容器共享網絡,前端直接用localhost:8080訪問后端,省掉端口映射的麻煩。
特點:
-
共享 IP、端口、網絡棧。
-
類似于在同一個“網絡空間”中運行多個進程。
命令示例:
docker run -d --name web1 nginx
docker run -d --network container:web1 busybox sleep 3600
5. overlay
用于跨宿主機的分布式網絡(Swarm/Kubernetes 常用)。
跨主機通信的"高鐵網絡"
當容器分布在多臺主機時,Overlay網絡就是連接它們的"高鐵系統"。通過VXLAN隧道技術(默認4789端口),把不同主機的容器編織成一個虛擬局域網。Swarm集群會自動分配10.0.0.0/8網段,服務發現靠內置DNS,比傳統跨主機通信快30%。
特點:
基于 VXLAN 實現隧道,容器在不同宿主機也能互通。
常用于多機集群環境。
命令示例(需要 Swarm/K8s 集群支持):
docker network create -d overlay mynet
docker service create --name myweb --network mynet nginx
配置復雜度很高,需要集群管理經驗。
6. macvlan
讓容器像宿主機一樣直接擁有物理網絡的 MAC 地址和 IP。
給容器分配真實MAC地址,讓它在物理網絡中"假裝"是臺物理機。交換機看到它會以為是新接入的服務器,直接通過MAC地址轉發數據,延遲低到可以忽略。
兩種姿勢:
- VEPA模式:所有流量走物理網卡,適合需要交換機策略控制的場景
- 橋接模式:直接連接物理網卡子接口,需交換機支持802.1Q VLAN
特點:
-
容器直接暴露在物理網絡中(跟虛擬機類似)。
-
無需 NAT,性能接近物理機。
-
需要網絡環境支持(交換機允許混雜模式)。
命令示例:
docker network create -d macvlan \--subnet=192.168.1.0/24 \--gateway=192.168.1.1 \-o parent=eth0 mymacvlandocker run -d --network mymacvlan nginx
7. 總結對比
模式 | 是否獨立 IP | 是否 NAT | 使用場景 |
---|---|---|---|
bridge | ? 是 | ? 有 | 默認容器網絡,單機應用 |
host | ? | 否 ? 無 | 高性能需求,端口復用限制 |
none | ? 否 | ? 無 | 手動配置網絡,安全隔離 |
container | ? 共享 | ? 無 | 多容器共享網絡棧 |
overlay | ?是 | ? 有 | 跨主機容器互通,集群 |
macvlan | ?是 | ? 無 | 容器直接暴露在物理網絡 |
“人的一生會經歷很多痛苦,但回頭想想,都是傳奇”。