目錄
一、Docker 容器的網絡模式
1. Bridge 模式
2.? Host 模式
3. Container 模式
4. None 模式
5. Overlay 模式
6. Macvlan 模式
7. 自定義網絡模式
?二、端口映射
1. 端口映射
2. 隨機映射端口
3. 指定映射端口
(1)固定端口
(2)宿主機隨機端口
三、容器互聯
1. 使用 --link 選項
(1)創建源容器
(2)創建接收容器
(3)測試容器互聯
四、容器間通信實現案例
1. docker network create?常用選項及示例
(一)--driver, -d
(二)--subnet
(三)--gateway
(四)--ip-range
(五)--internal
(六)--attachable
2. 容器間通信步驟
(一)創建自定義網絡
(二)創建一個不在此自定義網絡的容器
(三)創建兩個容器,并加入自定義網絡
(四)登錄到容器,測試通信結果
五、數據持久化技術
一、數據卷基礎概念
二、數據卷的作用
三、數據卷創建與使用
(一)匿名數據卷
(二)具名數據卷
四、數據卷共享
五、掛載主機目錄 / 文件作為數據卷
(一)掛載主機目錄案例(以 httpd 容器為例 )
(二)掛載主機文件 / 多目錄案例(以 nginx 容器為例 )
六、Docker 數據管理注意事項總結
一、Docker 容器的網絡模式
1. Bridge 模式
-
含義:
Docker 創建的虛擬網絡交換機(docker0
),容器通過?veth pair
?虛擬網卡接入隔離子網。 -
特點:
-
容器獲得獨立私有 IP(如?
172.17.0.2
) -
默認啟用 NAT 地址轉換
-
同網絡內容器互通,跨網絡隔離
-
-
作用:
-
容器網絡隔離:避免與宿主機網絡沖突
-
便捷互通:同一 Bridge 網絡內自動 DNS 解析
-
訪問外網:通過 iptables MASQUERADE 規則實現出向流量偽裝
-
-
配置:
# 創建自定義Bridge網絡(解決默認網絡無DNS問題) docker network create \--driver bridge \ # 網絡驅動類型--subnet 192.168.5.0/24 \ # 明確子網范圍(防IP沖突)--gateway 192.168.5.1 \ # 指定網關地址my-bridge # 網絡名稱# 容器接入自定義網絡 docker run -d \--name web \ --network my-bridge \ # 綁定網絡--ip 192.168.5.10 \ # 固定IP(可選)nginx
2.? Host 模式
-
含義:
容器直接共享宿主機的網絡命名空間,使用宿主機 IP 和端口資源。 -
特點:
-
無獨立網絡棧(
ifconfig
?顯示宿主機網卡) -
無 NAT 轉發層
-
-
作用:
-
網絡零損耗:消除 NAT 性能開銷(延遲降低 10%~15%)
-
直接暴露服務:省去端口映射步驟
-
-
配置:
docker run -d \--network host \ # 啟用Host模式nginx # 容器直接監聽宿主機80端口
3. Container 模式
-
含義:
新容器共享指定容器的網絡命名空間(共用 IP、端口、MAC 等)。 -
特點:
-
多容器共享同一網絡身份
-
通過?
localhost
?直接互訪
-
-
作用:
-
進程協同:實現 Sidecar 模式(如日志收集器監控應用容器)
-
零延遲通信:容器間直接環回接口通信
-
-
配置:
# 啟動目標容器(提供網絡棧) docker run -d --name web nginx# 新容器共享web容器的網絡 docker run -it \--network container:web \ # 綁定目標容器alpine \wget -qO- http://localhost # 直接訪問web容器的服務
4. None 模式
-
含義:
容器無任何網絡接口(僅保留?lo
?環回)。 -
特點:
-
極致網絡隔離
-
需手動配置網絡棧
-
-
作用:
-
安全沙箱:禁止所有網絡通信(金融級數據處理)
-
自定義網絡:用戶手動添加復雜網絡配置
-
-
配置:
docker run -it \--network none \ # 禁用網絡alpine ip addr # 僅顯示lo接口
5. Overlay 模式
-
含義:
基于 VXLAN 隧道封裝的跨主機虛擬網絡,用于集群環境。 -
特點:
-
大二層網絡抽象
-
支持 TLS 加密通信
-
-
作用:
-
跨主機直連:不同物理機上的容器互通如局域網
-
服務發現:內置分布式 KV 存儲(Swarm 集群)
-
-
配置:
# 初始化Swarm集群(必需) docker swarm init --advertise-addr <宿主機IP># 創建加密Overlay網絡 docker network create \-d overlay \ --subnet 10.11.0.0/16 \ --opt encrypted \ # 啟用數據加密swarm-net
6. Macvlan 模式
-
含義:
為容器分配真實 MAC 地址,使其作為獨立設備接入物理網絡。 -
特點:
-
容器直連物理網絡
-
需手動管理 IP
-
-
作用:
-
物理網絡集成:容器直接獲取物理網段 IP
-
繞過 NAT:外部設備可直接訪問容器
-
-
配置:
docker network create \-d macvlan \--subnet 192.168.1.0/24 \--gateway 192.168.1.1 \-o parent=eth0 \ # 綁定物理網卡-o macvlan_mode=bridge \ # MACVLAN模式macvlan-netdocker run -d \--network macvlan-net \--ip 192.168.1.105 \ # 必須指定未用IPnginx
7. 自定義網絡模式
-
含義:
用戶根據需求創建的定制化網絡,支持多種驅動(Bridge/Overlay/Macvlan等)。 -
特點:
-
可定義子網/IP范圍
-
支持自動 DNS 服務發現
-
網絡策略精細化控制
-
-
作用:
-
隔離環境:創建邏輯隔離的網絡域
-
服務發現:容器名自動解析為 IP
-
跨主機通信:Overlay 驅動支持集群
-
-
配置:
# 創建自定義Bridge網絡 docker network create \--driver bridge \ # 網絡驅動類型--subnet 10.7.0.0/16 \ # 自定義子網--gateway 10.7.0.1 \ # 網關地址--ip-range 10.7.1.0/24 \ # IP分配范圍--attachable \ # 允許運行中容器接入my-network # 網絡名稱# 容器加入自定義網絡 docker run -d --name web --network my-network nginx
?二、端口映射
1. 端口映射
-
含義:建立宿主機端口與容器端口的流量轉發通道。
-
特點:
-
基于 iptables DNAT 規則
-
支持 TCP/UDP 協議
-
-
作用:
-
暴露容器服務到外部網絡
-
解決容器網絡隔離導致的訪問限制
-
2. 隨機映射端口
-
含義:由 Docker 自動分配宿主機可用端口。
-
作用:
-
避免端口沖突
-
快速測試多實例服務
-
-
配置:
# 映射所有EXPOSE聲明的端口 docker run -d -P nginx # 大寫P參數# 查看映射關系 docker port <容器名> # 輸出示例:80/tcp -> 0.0.0.0:32768#查看進程狀態 docker ps -a
3. 指定映射端口
docker run 用于創建并啟動新的容器,通過-p可以指定容器端口到宿主機端口的映射
(1)固定端口
本質:將宿主機指定端口永久綁定到容器端口。
配置:
# 基礎語法:-p <宿主機端口>:<容器端口>[/協議]
docker run -d -p 8080:80 nginx # 宿主機8080 → 容器80# 綁定特定IP(僅該IP可訪問)
docker run -d -p 192.168.1.100:8080:80 nginx# 多協議支持
docker run -d \-p 80:80/tcp \ # TCP協議-p 53:53/udp # UDP協議dns-server# 端口范圍映射
docker run -d -p 8000-8010:8000-8010 port-app
(2)宿主機隨機端口
本質:由 Docker 自動分配宿主機可用端口。
配置:
# 隨機綁定宿主機端口到容器指定端口
docker run -d -p 80 nginx # 查看端口:docker port <容器名># 隨機綁定TCP和UDP端口
docker run -d -p 80/tcp -p 53/udp dual-protocol-app# 批量隨機映射(容器EXPOSE的所有端口)
docker run -d -P nginx # 大寫P參數
查看映射:
docker port my-container
# 輸出:80/tcp -> 0.0.0.0:32768
# 443/tcp -> 0.0.0.0:32769
三、容器互聯
容器互聯(Container Networking)?是 Docker 中實現容器間通信的核心機制,其核心邏輯為:
通過虛擬網絡層,使多個容器在隔離環境中安全、高效地交換數據,無需依賴物理網絡配置。
1. 使用 --link 選項
-
含義:在容器間建立單向網絡連接。
-
特點:
-
自動更新 /etc/hosts 文件
-
注入環境變量
-
-
作用:
-
實現容器間基礎通信
-
提供簡單的服務發現
-
(1)創建源容器
docker run -dit --name web01 centos:7
(2)創建接收容器
docker run -dit --name web02 --link web01:myweb01 centos:7
(3)測試容器互聯
#登錄
docker exec -it web02 /bin/bash#查看
cat /etc/hosts#測試
ping myweb01
四、容器間通信實現案例
因?--link
?選項漸被棄用,推薦用 Docker 網絡實現容器互聯,docker network create
?用于創建自定義網絡,支撐容器間及容器與外部通信。
1. docker network create
?常用選項及示例
(一)--driver, -d
指定網絡驅動程序,默認?bridge
?,常見驅動:
bridge
:單 Docker 主機容器間通信,示例 :docker network create -d bridge my_bridge_network
host
:容器用宿主機網絡接口,無網絡隔離overlay
:多 Docker 主機跨主機網絡,用于 Docker Swarm 集群macvlan
:給容器分配 MAC 地址,模擬獨立物理設備
(二)--subnet
指定網絡子網,用 CIDR 表示法,示例 :docker network create --subnet=172.18.0.0/16 my_subnet_network
(三)--gateway
指定網絡網關 IP 地址,示例 :
docker network create \
--subnet=172.19.0.0/16 \
--gateway=172.19.0.1 \
my_gateway_network
(四)--ip-range
指定容器可用 IP 地址范圍,示例 :
docker network create \
--subnet=172.20.0.0/16 \
--gateway=172.20.0.1 \
--ip-range=172.20.1.0/24 \
my_ip_range_network
(五)--internal
設為內部網絡,容器無法訪問外部網絡,示例 :docker network create --internal my_internal_network
(六)--attachable
允許獨立容器(非服務器容器 )連入網絡,示例 :docker network create --attachable my_attachable_network
2. 容器間通信步驟
(一)創建自定義網絡
執行?docker network create my_net
?,先構建容器通信的網絡基礎。
(二)創建一個不在此自定義網絡的容器
docker run -dit --name web03 centos:7
(三)創建兩個容器,并加入自定義網絡
docker run -dit --name pc01 --net=my_net centos:7
docker run -dit --name pc02 --net=my_net centos:7
(四)登錄到容器,測試通信結果
docker exec -it pc01 /bin/bash
ping pc02 #通
ping web03 #不通
五、數據持久化技術
一、數據卷基礎概念
Docker 數據卷(Data Volumes)是實現容器與宿主機數據持久化存儲、共享的機制。它是供一個或多個容器使用的特殊目錄,繞過容器文件系統,直接關聯宿主機目錄 / 文件,容器刪除后數據卷數據仍留存,保障數據持久化 。
二、數據卷的作用
-
數據持久化:容器生命周期短暫,內部文件系統數據隨容器刪除消失,數據卷將數據存宿主機,避免因容器刪除丟失 。
-
數據共享:多個容器可掛載同一數據卷,實現配置文件、日志等數據共享,適配需共享數據的場景 。
-
數據備份和恢復:數據存于宿主機,便于對數據卷執行備份、恢復操作 。
-
分離數據和應用:數據存數據卷,讓容器鏡像更輕巧(僅含應用程序),提升容器可移植性與可維護性 。
三、數據卷創建與使用
(一)匿名數據卷
創建容器時用?-v
?或?--volume
?參數創建、掛載。如:
docker run -dit -v /data1 -v /data2 --name web04 centos:7
會在容器內建?/data1
、/data2
?數據卷,宿主機對應存儲目錄為?/var/lib/docker/volumes/
?下自動分配的目錄,容器刪除后宿主機數據仍在 。可進入容器(docker exec -it web04 /bin/bash
?)驗證數據卷目錄。
(二)具名數據卷
- 創建:通過?
docker volume create my_volume
?命令,創建名為?my_volume
?的具名數據卷,便于管理識別 。 - 掛載使用:創建容器時掛載,如?
docker run -d -v my_volume:/data --name my_container nginx
?,先建具名卷,再掛載到容器?/data
?目錄 。
四、數據卷共享
- 借助?
--volumes-from
?參數,讓新容器掛載已有容器的數據卷,實現數據共享。示例:docker run -dit --volumes-from web04 --name web05 centos:7 /bin/bash
新容器?
web05
?會掛載?web04
?已掛載的數據卷,即便?web04
?刪除,只要數據卷未刪,web05
?仍能訪問數據;且多個容器共享數據卷時,數據修改會影響所有掛載該卷的容器 。
五、掛載主機目錄 / 文件作為數據卷
(一)掛載主機目錄案例(以 httpd 容器為例 )
docker run -dit -p 8080:80 -v /data1:/usr/local/apache2/htdocs --name web06 httpd
將宿主機?/data1
?目錄掛載到容器?/usr/local/apache2/htdocs
?目錄,可在宿主機?/data1
?建測試文件(如?echo "ni hao">/data1/index.html
?),通過?curl 192.168.10.101:8080
?訪問驗證 。
(二)掛載主機文件 / 多目錄案例(以 nginx 容器為例 )
-
準備工作:在宿主機建掛載目錄(
mkdir -p /www/{conf,html}
?),將 nginx 配置文件放?/www/conf
?,網頁代碼放?/www/html
?。 -
創建容器掛載:
docker run -d -p 9090:80 \ -v /www/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /www/html:/www/html \ -v /www/nginx/log:/var/log/nginx \ --name web07 nginx /bin/bash -c "nginx"
或簡化啟動命令(利用 nginx 默認啟動指令 ):
docker run -d -p 9090:80 \ -v /www/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /www/html:/www/html \ -v /www/nginx/log:/var/log/nginx \ --name web08 nginx "nginx"
實現主機文件、多目錄掛載到 nginx 容器對應位置,需注意掛載文件時,宿主機要先有對應文件,否則會創建同名目錄致容器內無法正常使用文件 。
數據卷通過靈活的創建、掛載、共享等操作,滿足 Docker 容器在數據持久化、共享協作等場景的需求,是 Docker 數據管理的核心手段之一 。
六、Docker 數據管理注意事項總結
在 Docker 進行數據管理時,需從多維度保障數據有效管理,具體注意事項如下:
-
類型適配場景:依據需求選數據卷類型,匿名卷(創建簡,管不便 )存臨時中間數據(如編譯文件 );具名卷(易管理共享 )存持久化高頻使用數據(如數據庫 );掛載主機目錄卷適配主機交互場景(共享配置、數據 )。
-
路徑規范使用:掛載主機目錄作數據卷,務必用絕對路徑,否則掛載失敗。
-
數據卷定期清理:借?
docker volume ls
?查數據卷,用?docker volume rm
?清理不用的匿名 / 具名卷,釋放磁盤空間。 -
容器數據持久化:容器文件系統數據易失,需持久化的數據(尤其是數據庫、日志等關鍵數據 )存數據卷;多容器掛載同卷要處理并發,可在應用層設同步機制(鎖、事務 );關鍵數據(如 MySQL 數據目錄?
/var/lib/mysql
?)綁定數據卷,保障可恢復 。