Docker 高級管理——容器通信技術與數據持久化

目錄

一、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)是實現容器與宿主機數據持久化存儲、共享的機制。它是供一個或多個容器使用的特殊目錄,繞過容器文件系統,直接關聯宿主機目錄 / 文件,容器刪除后數據卷數據仍留存,保障數據持久化 。

二、數據卷的作用

  1. 數據持久化:容器生命周期短暫,內部文件系統數據隨容器刪除消失,數據卷將數據存宿主機,避免因容器刪除丟失 。

  2. 數據共享:多個容器可掛載同一數據卷,實現配置文件、日志等數據共享,適配需共享數據的場景 。

  3. 數據備份和恢復:數據存于宿主機,便于對數據卷執行備份、恢復操作 。

  4. 分離數據和應用:數據存數據卷,讓容器鏡像更輕巧(僅含應用程序),提升容器可移植性與可維護性 。

三、數據卷創建與使用

(一)匿名數據卷

創建容器時用?-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?)驗證數據卷目錄。

(二)具名數據卷
  1. 創建:通過?docker volume create my_volume?命令,創建名為?my_volume?的具名數據卷,便于管理識別 。
  2. 掛載使用:創建容器時掛載,如?docker run -d -v my_volume:/data --name my_container nginx?,先建具名卷,再掛載到容器?/data?目錄 。

四、數據卷共享

  1. 借助?--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 容器為例 )
  1. 準備工作:在宿主機建掛載目錄(mkdir -p /www/{conf,html}?),將 nginx 配置文件放?/www/conf?,網頁代碼放?/www/html?。

  2. 創建容器掛載

    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 進行數據管理時,需從多維度保障數據有效管理,具體注意事項如下:

  1. 類型適配場景:依據需求選數據卷類型,匿名卷(創建簡,管不便 )存臨時中間數據(如編譯文件 );具名卷(易管理共享 )存持久化高頻使用數據(如數據庫 );掛載主機目錄卷適配主機交互場景(共享配置、數據 )。

  2. 路徑規范使用:掛載主機目錄作數據卷,務必用絕對路徑,否則掛載失敗。

  3. 數據卷定期清理:借?docker volume ls?查數據卷,用?docker volume rm?清理不用的匿名 / 具名卷,釋放磁盤空間。

  4. 容器數據持久化:容器文件系統數據易失,需持久化的數據(尤其是數據庫、日志等關鍵數據 )存數據卷;多容器掛載同卷要處理并發,可在應用層設同步機制(鎖、事務 );關鍵數據(如 MySQL 數據目錄?/var/lib/mysql?)綁定數據卷,保障可恢復 。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/910601.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/910601.shtml
英文地址,請注明出處:http://en.pswp.cn/news/910601.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

git操作案例 -設置遠程分支,并提交到新遠程新分支

文章目錄 前言一、分析當前的問題二、修改遠程倉庫地址&#xff08;一&#xff09;修改遠程倉庫地址場景 現有保留遠程分支場景替換現有遠程分支 二、 找回已經提交的文件場景&#xff1a;提交后&#xff0c;代碼在本地倉庫但未推送 三、同步遠程分支四、提交到新遠程的新分支 …

mysql一張表,其中一個字段設置了唯一索引,又設置了普通索引,查詢的時候很慢,沒有走普通索引,是const

問題分析 在 MySQL 中&#xff0c;當一個字段同時存在唯一索引和普通索引時&#xff0c;查詢優化器通常會優先選擇最嚴格的索引&#xff08;即能最快縮小結果集的索引&#xff09;。在你的場景中&#xff0c;優化器選擇了唯一索引并將查詢視為const類型&#xff0c;這通常是高…

ARCGIS國土超級工具集1.6更新說明

ARCGIS國土超級工具集V1.6版本&#xff0c;功能已增加至60 個。本次更新在V1.5版本的基礎上&#xff0c;除修復了使用時發現的若干小問題外&#xff0c;還更新及新增了若干工具。其中勘測定界工具欄更新了界址點西北角重排工具&#xff0c;新增了提示圖斑起始點、指定圖斑起始點…

零基礎學習RabbitMQ(2)--Linux安裝RabbitMQ

注意&#xff1a;這里使用的是ubuntu系統 1. 安裝Erlang RabbitMQ需要Erlang語言的支持&#xff0c;在安裝rabbitMQ之前需要安裝Erlang #更新軟件包 sudo apt-get update #安裝erlang sudo apt-get install erlang 安裝后輸入 rel可查看Erlang版本&#xff1a; 輸入halt().…

Centos進單用戶模式

一、開機按E 二、修改里面的linux行 把ro 修改成rw init/sysroot/bin/sh 修改前&#xff1a; 修改后&#xff1a; 三、ctrl x退出&#xff0c;進入單用戶模式

RabbitMQ 的工作流程

RabbitMQ 是一個消息中間件&#xff0c;實現了生產者消費者模型&#xff0c;可以用來接收、存儲、轉發消息。 專有名詞介紹 要了解 RabbitMQ 的工作流程&#xff0c;我們需要先了解下面幾個關鍵詞&#xff1a; 1、Producer 生產者&#xff0c;即向 RabbitMQ 發送消息。 2…

HTTP——不同版本區別

目錄 HTTP1.0和HTTP1.1的區別 HTTP1.1相比HTTP1.0性能上的改進&#xff1a; 但是HTTP1.1還是有性能瓶頸&#xff1a; HTTP/2做了什么優化&#xff1f; HTTP/3的優點 HTTP與HTTPS的區別 HTTPS的工作原理 1.ClientHello 2.ServerHello 3.客戶端回應 4.服務器的最后回應…

關于M0+芯片的IAP應用導致延時不準確解釋

前言&#xff1a;在給項目中使用的M0芯片做IAP功能時一切一切都是那么的自然水到渠成&#xff0c;但是筆者在實現完IAP功能后&#xff0c;卻發現APP端掛載的單總線功能崩潰了&#xff0c;最開始沒有懷疑是bootload導致的。因為筆者在使用同一篇代碼的時候單總線掛載的設備不同&…

安卓登錄學習筆記

1. 背景與目標 (Background and Goal) 背景: 我們要創建一個用戶登錄界面。用戶輸入用戶名和密碼&#xff0c;點擊“登錄”按鈕。應用會顯示一個加載中的“圈圈”&#xff08;ProgressBar&#xff09;&#xff0c;然后模擬一個耗時2秒的網絡請求。根據請求結果&#xff0c;界面…

Git(三):分支管理

文章目錄 Git(三)&#xff1a;分支管理理解分支創建分支切換分支合并分支刪除分支合并沖突分支管理策略分支策略Bug分支刪除臨時分支 Git(三)&#xff1a;分支管理 理解分支 本章介紹Git的殺手級功能之一&#xff1a;分支 分支就 是科幻電影里面的平行宇宙&#xff0c;當你正…

電子電氣架構 --- 電氣架構基礎(汽車電子)

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從,不跟風。把自己的精力全部用在自己。一是去掉多余,凡事找規律,基礎是誠信;二是…

RestClient 功能介紹、完整使用示例演示, 和RestTemplate、WebClient 對比

RestClient功能介紹 RestClient是Spring Framework 6.1版本引入的同步HTTP客戶端&#xff0c;旨在替代老舊的RestTemplate&#xff0c;提供更現代、流暢的API設計。其核心特點包括&#xff1a; 流暢API&#xff08;Fluent API&#xff09;&#xff1a; 支持鏈式調用&#xff0…

VM經常遇見的運行慢幾種情況、以及設置方法

大家好,我是東哥說-MES 啟動虛擬機是提示如下內容 “無法打開內核設備“\.\VMCIDev\VMX”: 操作成功完成。是否在安裝 VMware Workstation 后重新引導? 模塊“DevicePowerOn”啟動失敗。 未能啟動虛擬機。” 2.用記事本打開安裝目錄下TIA Portal STEP7 Prof Safety WinCC …

【C++語法】類和對象(4)——日期類和const成員函數

6.類和對象&#xff08;4&#xff09; 文章目錄 6.類和對象&#xff08;4&#xff09;回顧簡單日期類的實現代碼補充&#xff1a;前置與后置的重載區別補充&#xff1a;關于流插入運算符&#xff08;<<&#xff09;的解釋拓展&#xff1a;仿照流插入操作符(<<)的作…

當凌晨的鍵盤聲,遇見黎明的星光?

地鐵玻璃映出你困倦的臉&#xff0c;耳機里的音樂循環到第 17 遍&#xff0c;早高峰的人群像沙丁魚罐頭般擠壓著你。這是你每天雷打不動的三小時通勤路&#xff0c;從城市邊緣到寫字樓林立的 CBD&#xff0c;窗外的風景換了四季&#xff0c;而你始終困在搖晃的車廂里&#xff0…

Web Worker技術詳解與應用場景

我們來詳細探討一下 Web Worker。它是現代 Web 開發中解決 JavaScript 單線程限制、提升應用性能和響應能力的關鍵技術。 核心問題&#xff1a;JavaScript 的單線程模型 瀏覽器 UI 線程&#xff08;主線程&#xff09;&#xff1a;JavaScript 在瀏覽器中默認運行在單個線程&a…

React Next快速搭建前后端全棧項目并部署至Vercel

很好&#xff0c;你是想搞清楚Next.js 的后端結構和傳統 Node Express 的區別對比&#xff0c;我來整理一套結構化、精準、對面試有說服力的解答&#xff0c;并附示意結構圖。 01Next vs Express 、## ??1?? Next.js 后端是怎么構建的 Next.js 在默認情況下本身就集成后…

【T寶客戶項目解決過程】01-模型訓練

1 項目需求描述 博主自己開了一家T寶店&#xff0c;有一個客戶有這個需求&#xff1a;有一大堆圖像&#xff0c;大概有10多萬張圖&#xff0c;都是比較小尺寸的圖。各種類型都有&#xff0c;我們想要通過將不同類型發圖像進行分開&#xff0c;如何實現呢&#xff1f; 2 思路 …

如何在中將網絡改為橋接模式并配置固定IP地址

在使用服務器搭建虛擬機的過程中&#xff0c;我們發現有許多場景需要將虛擬機的網絡配置為橋接模式&#xff0c;并為其設置固定的IP地址。為了幫助大家更高效地進行網絡配置&#xff0c;提升虛擬機的連接穩定性和管理便捷性&#xff0c;我們總結了這篇指南&#xff0c;介紹如何…

強化學習 - 基于策略的Reinforce算法

&#x1f3af; REINFORCE 策略梯度算法推導&#xff08;完整&#xff09; 1. 目標函數定義 我們希望最大化策略的期望回報&#xff1a; J ( θ ) E τ ~ π θ [ R ( τ ) ] J(\theta) \mathbb{E}_{\tau \sim \pi_\theta} \left[ R(\tau) \right] J(θ)Eτ~πθ??[R(τ…