Docker 容器通信與數據持久化

目錄

簡介

一、Docker 容器通信

1. Docker 網絡模式

2. Bridge 模式

3. Host 模式

4. Container 模式

5. Overlay 模式

6. 端口映射:容器與外部的橋梁

7. 容器互聯:從 --link 到自定義網絡

二、Docker 數據持久化

1. 數據卷:Docker 持久化的機制

2. 匿名數據卷

3. 具名數據卷

4. 容器間數據共享:--volumes-from 實現數據傳遞

5. 掛載主機目錄

三、注意事項

1. 網絡配置

2. 數據持久化

四、總結


簡介

在現代軟件開發與部署中,Docker 容器化技術已成為不可或缺的基礎設施。隨著應用規模的擴大,容器間的通信效率與數據持久化管理成為兩大核心挑戰。本文將深入探討 Docker 高級管理中的容器通信技術與數據持久化方案,幫助讀者構建高效、可靠的容器化應用架構。

一、Docker 容器通信

1. Docker 網絡模式

Docker 提供了豐富的網絡模式,滿足不同場景下的通信需求:

網絡模式

關鍵參數

核心特性

適用場景

host

--network host

共享宿主機網絡棧,無網絡命名空間

高性能、無隔離需求的服務

container

--network container: 目標容器

共享指定容器的網絡配置

緊密耦合的容器組(如應用 + 日志收集器)

none

--network none

僅保留回環接口,無外部網絡

高安全需求、手動配置網絡的場景

bridge

默認模式,-d bridge

通過 docker0 網橋實現容器互聯

單主機多容器通信(默認模式)

overlay

-d overlay

基于 VXLAN 跨主機容器通信

Docker Swarm 集群

macvlan

-d macvlan

為容器分配獨立 MAC 地址

高性能網絡、直接接入物理網絡

自定義

docker network create

靈活配置子網、網關等參數

定制化網絡需求

2. Bridge 模式

Bridge 模式是 Docker 的默認網絡模式,工作原理如下:

  • 自動創建 docker0 虛擬網橋
  • 容器通過 veth pair 連接到網橋
  • 宿主機通過 NAT 實現容器與外部網絡通信

實戰示例:創建自定義 Bridge 網絡

# 創建名為 my-net 的 bridge 網絡
docker network create -d bridge my-net
# 解釋:-d 指定驅動類型為 bridge,my-net 是網絡名稱# 查看所有網絡
docker network ls
# 輸出包含網絡 ID、名稱、驅動類型等信息# 運行容器并連接到 my-net 網絡
docker run -itd --rm --name busybox1 --network my-net busybox sh -c 'while true; do echo hello; done'
# 解釋:
# -itd:交互模式、守護進程運行、后臺運行
# --rm:容器停止后自動刪除
# --name:指定容器名稱
# --network:指定連接的網絡
# busybox:基礎鏡像
# sh -c 'while true; do echo hello; done':容器啟動后執行的命令# 另一個容器加入同一網絡并測試通信
docker run -it --rm --name busybox2 --network my-net busybox sh
# 在容器內執行 ping busybox1 可直接通過容器名通信

3. Host 模式

Host 模式讓容器直接使用宿主機的網絡棧,適用于對網絡性能要求極高的場景:

# 以 host 模式運行容器
docker run -tid --net=host --name docker_host1 busybox
# 解釋:--net=host 指定使用宿主機網絡,容器將共享宿主機的 IP 和端口# 進入容器查看網絡配置
docker exec -it docker_host1 sh
ifconfig
# 輸出顯示容器使用宿主機的網絡接口(如 ens33),IP 與宿主機一致

4. Container 模式

Container 模式允許容器共享另一個容器的網絡命名空間,適用于緊密耦合的服務組合:

# 創建基礎容器 host1
docker run -tid --name host1 busybox# 創建新容器 host2,共享 host1 的網絡
docker run -itd --net=container:host1 --name host2 busybox# 驗證網絡配置一致性
docker exec -it host1 ifconfig
docker exec -it host2 ifconfig
# 兩個容器的 IP、MAC 地址完全一致

5. Overlay 模式

Overlay 模式基于 VXLAN 技術,是 Docker Swarm 集群的核心網絡方案:

# 在 Swarm 集群中創建 Overlay 網絡
docker network create -d overlay my_overlay_network
# 解釋:-d overlay 指定使用 Overlay 驅動,支持跨主機通信# 在集群中部署服務并連接到 Overlay 網絡
docker service create --name my_service --network my_overlay_network nginx
# 解釋:--service 創建集群服務,--network 指定使用 Overlay 網絡

6. 端口映射:容器與外部的橋梁

Docker 通過端口映射實現容器服務對外暴露:

  • ??-P??(大寫):自動隨機映射容器所有暴露端口
  • ??-p??(小寫):指定宿主機端口到容器端口的映射

隨機端口映射示例

# 隨機映射 Nginx 容器的 80 端口
docker run --rm -d -P nginx
# 解釋:--rm 容器停止后自動刪除,-P 隨機映射所有暴露端口# 查看映射結果
docker ps
# 輸出顯示宿主機隨機端口(如 32768)映射到容器 80 端口

指定端口映射示例

# 將容器 80 端口映射到宿主機 8080 端口
docker run --rm -d -p 8080:80 nginx
# 解釋:-p 格式為 [宿主機端口]:[容器端口],可通過 http://宿主機 IP:8080 訪問容器服務# 宿主機隨機端口映射(僅指定容器端口)
docker run --rm -d -p 80 nginx
# 解釋:宿主機端口由 Docker 自動分配,適用于快速測試

7. 容器互聯:從 --link 到自定義網絡

早期 Docker 使用???--link???實現容器互聯,但該方式已被棄用,推薦使用自定義網絡:

傳統 --link 方式(不推薦)

# 創建源容器 web01
docker run -dit --name web01 centos:7# 創建接收容器 web02,通過 --link 互聯
docker run -dit --name web02 --link web01:myweb01 centos:7
# 解釋:--link web01:myweb01 允許 web02 通過 myweb01 別名訪問 web01# 測試互聯
docker exec -it web02 bash
cat /etc/hosts  # 查看域名解析
ping myweb01    # 可通過別名通信

推薦方案:自定義網絡實現容器互聯

# 創建自定義網絡 my_net
docker network create my_net# 創建不在該網絡的容器 web03
docker run -dit --name web03 centos:7# 創建兩個容器并加入 my_net 網絡
docker run -dit --name pc01 --net=my_net centos:7
docker run -dit --name pc02 --net=my_net centos:7# 測試通信(pc01 中執行)
ping pc02  # 通,同一網絡內可直接通過容器名通信
ping web03 # 不通,不在同一網絡

二、Docker 數據持久化

1. 數據卷:Docker 持久化的機制

數據卷是 Docker 實現數據持久化的關鍵,具有以下特性:

  • 繞過容器文件系統,直接掛載宿主機目錄
  • 容器刪除后數據不丟失
  • 支持多容器共享數據

2. 匿名數據卷

# 創建容器并掛載匿名數據卷
docker run -dit -v /data1 -v /data2 --name web04 centos:7
# 解釋:
# -v /data1:在容器內創建 /data1 目錄作為數據卷
# Docker 自動在宿主機 /var/lib/docker/volumes 下生成對應目錄# 驗證數據持久化
docker exec -it web04 bash
touch /data1/test.txt  # 在容器內創建文件
exitdocker rm -f web04  # 刪除容器# 查看宿主機數據卷(需進入 Docker 數據目錄)
# 數據仍保留在宿主機,新容器掛載后可訪問

3. 具名數據卷

# 創建具名數據卷
docker volume create my_volume
# 解釋:創建名為 my_volume 的數據卷,存儲在宿主機指定位置# 掛載具名數據卷到容器
docker run -d -v my_volume:/data --name my_container nginx
# 解釋:-v my_volume:/data 將具名卷掛載到容器 /data 目錄# 查看數據卷詳情
docker volume inspect my_volume
# 輸出包含數據卷驅動、掛載路徑等信息

4. 容器間數據共享:--volumes-from 實現數據傳遞

# 從已有容器 web04 掛載數據卷
docker run -dit --volumes-from web04 --name web05 centos:7
# 解釋:--volumes-from web04 使 web05 共享 web04 的所有數據卷# 驗證共享:在 web05 中修改數據卷文件,web04 可同步看到變化

5. 掛載主機目錄

# 案例 1:掛載宿主機目錄到 Web 容器
docker run -dit -p 8080:80 -v /data1:/usr/local/apache2/htdocs --name web06 httpd
# 解釋:
# -p 8080:80:映射端口
# -v /data1:/usr/local/apache2/htdocs:將宿主機 /data1 目錄掛載到容器 Web 根目錄# 在宿主機創建測試文件
echo "ni hao" > /data1/index.html# 訪問服務:http://宿主機 IP:8080 可看到文件內容
# 案例 2:多目錄掛載(以 Nginx 為例)
# 先在宿主機準備目錄
mkdir -p /www/{conf,html,nginx/log}# 創建容器并掛載多個目錄
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"
# 解釋:
# 分別掛載配置文件、網站內容、日志目錄
# 實現容器配置與數據的持久化管理

三、注意事項

1. 網絡配置

  • 生產環境避免使用 host 模式,優先使用自定義 bridge 網絡或 overlay 網絡
  • 容器間通信通過自定義網絡實現,避免使用已棄用的 --link
  • 端口映射時明確指定宿主機端口,避免隨機映射導致的管理混亂

2. 數據持久化

  • 關鍵數據(如數據庫)必須使用具名數據卷或掛載主機目錄
  • 定期清理無用數據卷:??docker volume prune??
  • 多容器共享數據卷時,需考慮并發訪問的數據一致性
  • 重要數據卷建議配置備份策略,如定時拷貝宿主機數據目錄

四、總結

通過掌握多種網絡模式(bridge/host/overlay 等)和端口映射機制,可構建靈活高效的容器通信架構;而數據卷技術(匿名卷 / 具名卷 / 主機掛載)則確保了數據的持久化與可管理性。

在實際應用中,建議根據業務場景選擇合適的技術方案:單主機應用優先使用 bridge 網絡與具名數據卷,集群應用采用 overlay 網絡配合分布式存儲。通過持續實踐這些技術,可大幅提升 Docker 容器化應用的可靠性與可維護性,為微服務架構和云原生應用奠定基礎。

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

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

相關文章

【教學類-89-08】20250624新年篇05——元宵節燈籠2CM黏貼邊(倒置和正立數字 )

背景需求: 【教學類-89-06】20250220新年篇05——元宵節燈籠2CM黏貼邊(3邊形到50邊形,一頁1圖、2圖、4圖,適合不同水平,適合不同階段)-CSDN博客文章瀏覽閱讀1.6k次,點贊35次,收藏27…

【DB2】SQL0104N An unexpected token “OCTETS“ was found following “……

db2創建表時報標題的錯誤,建表語句如下 db2 "CREATE TABLE YS.TEST_1(ID VARCHAR(64 OCTETS))"去掉octets就好了 經過測試,在9.7版本報錯,在10.5.11沒問題,懷疑版本差異導致 在官網查找資料,應該是10.5才…

暴雨以信創委員會成員單位身份參與南京專題活動

6月19日,中國電子工業標準化技術協會信息技術應用創新工作委員會(簡稱信創工委會)聯合南京市工業和信息化局共同舉辦的“智啟未來:AI賦能信息技術應用創新辦公新勢力”專題活動在南京成功舉辦。南京市工業和信息化局副局長代吉上、…

基于keepalived、vip實現高可用nginx (centos)

基于keepalived、vip實現高可用nginx (centos) 1、安裝keepalived yum install keepalived2、選同一局域網空置ip作vip 我這里測試是: 主:192.168.163.134 副:192.168.163.135 vip:192.168.163.1403、ke…

使用 launch 啟動 rviz2 并加載機器人模型

視頻資料:《ROS 2機器人開發從入門到實踐》6.2.2 在RViz中顯示機器人_嗶哩嗶哩_bilibili 1、創建工作空間 chapt6_ws/src,創建包 fishrobot_description ros2 create fishrobot_description --build-type ament_cmake --license Apache-2.0 2、創建機器…

華為云Flexus+DeepSeek征文 | 基于CCE容器的AI Agent高可用部署架構與彈性擴容實踐

華為云FlexusDeepSeek征文 | 基于CCE容器的AI Agent高可用部署架構與彈性擴容實踐 🌟 嗨,我是IRpickstars! 🌌 總有一行代碼,能點亮萬千星辰。 🔍 在技術的宇宙中,我愿做永不停歇的探索者。 …

Python學習Day41

學習來源:浙大疏錦行 知識回顧 數據增強卷積神經網絡定義的寫法batch歸一化:調整一個批次的分布,常用與圖像數據特征圖:只有卷積操作輸出的才叫特征圖調度器:直接修改基礎學習率 卷積操作常見流程如下: …

數組題解——最長回文子串【LeetCode】

5. 最長回文子串 一、向右拓展 算法思路 你用res記錄當前找到的最長回文子串。每次遍歷到s[i]時,嘗試找到以s[i]結尾的、比當前res更長的回文子串。 先嘗試長度為len(res)2(即起點i-len(res)-1)的子串,看是不是回文。如果不是&…

?從零搭建 Ubuntu22.04 + Python3.11 + PyTorch2.5.1 GPU Docker 鏡像并上傳 Docker Hub

🚀 從零搭建 Ubuntu22.04 Python3.11 PyTorch2.5.1 GPU Docker 鏡像并上傳 Docker Hub 在 AI 項目開發中,構建統一的運行環境是一件非常重要的事情。使用 Docker 可以極大地提升部署效率、保證環境一致性。本文將手把手帶你: ? 構建一個…

紀念抗戰勝利知識答題pk小程序

紀念抗戰勝利知識答題PK小程序通常有以下功能: 一、基礎答題功能 題目展示:清晰呈現題目內容,支持文字、圖片、音頻或視頻等多種形式的題目素材,且能按選擇題、填空題、判斷題等不同題型分類展示。答案提交與判斷:用…

AI模型本質與學習范式解析

從統計學習(也就是數學)的角度來分析深度學習模型的本質。 頻率派與貝葉斯派對模型本質理解的差異:前者認為學習參數估計,后者認為學習后驗分布。不過這個問題下概率分布的視角更本質。 三個核心部分:任務類型分類&a…

【AI落地應用實戰】Chaterm:重新定義終端操作的AI智能工具

目錄 一、AI Agent 終端新范式二、Chaterm安裝與基礎功能體驗2.1、源碼安裝與配置2.2、基礎功能體驗 三、Chaterm運維案例實踐四、從 Chaterm 看智能終端工具的演進方向4.1 更低門檻:面向“非專業人員”的運維民主化4.2 更強擴展性:從工具到平臺的演化 五…

IO多路復用——Select底層原理深度分析(流程圖)

文章目錄 1.kern_select 參數驗證和初始化流程2. do_select() 詳細實現流程3. 位圖數據結構詳解4. 文件描述符處理詳細流程5. Poll方法調用鏈6. 等待機制實現7. 用戶態處理就緒事件8. 性能瓶頸分析9. 與其他I/O多路復用對比 Select 整體調用流程: #mermaid-svg-766A…

多光譜掃描技術在實物建模中的應用:如何實現1:1真實材質還原

在實物建模領域,傳統方式常常陷入尷尬境地:耗費大量時間精力構建的模型,材質看起來卻與真實物體相差甚遠,塑料質感的 “金屬”、模糊不清的紋理,讓模型失去了應有的真實感。而在文物保護、產品設計等對真實材質還原要求…

Python復雜網絡分析和建模庫之networkx使用詳解

概要 在當今信息爆炸的時代,復雜網絡無處不在。NetworkX是一個用于創建、操作和研究復雜網絡結構、動態和功能的Python庫。它提供了豐富的數據結構來表示各種類型的網絡,如無向圖、有向圖、加權圖等,并支持大量的圖算法,包括最短路徑計算、中心性分析、社區發現等。 安裝 …

前端依賴升級完全指南:npm、pnpm、yarn 實踐總結

在前端項目開發過程中,定期升級依賴不僅能享受新特性、修復安全問題,還能保證工具鏈長期穩定運行。本文全面總結 npm、pnpm、yarn 三大主流包管理器在 依賴包升級 方面的實踐方法,并補充版本符、依賴安裝的基礎知識,適合新手與有經…

[持續集成]

學習目標 能夠使用 Git 代碼托管平臺管理代碼能夠實現 jenkinspostman 的持續集成能夠實現 jenkins代碼 的持續集成 持續集成 概念 : 將自己工作成果持續不斷地把代碼聚集在一起,成員可以每天集成一次或多次相關工具 : git : 代碼管理工具,自帶本地倉庫gitee : 遠程代碼管理…

FSMC控制LCD(TFTLCD:Z350IT002)顯示案例

顯存不一定要擦除,只要來一個地址就可以對其進行讀寫,而且一般的需求是不停的寫入(不同的像素點給不同的值),所以是RAM(flash和E2PROM要擦除才能寫入),由于FSMC沒有DRAM所以我們只能…

云原生周刊:Argo CD v3.1 正式發布

開源項目推薦 Kubewall Kubewall 是一個輕量級的開源 Kubernetes 儀表盤,支持多集群管理,主打單二進制部署和瀏覽器訪問,提供實時資源監控、YAML 編輯、拓撲視圖、日志查看等功能。它使用 Go 與 React 構建,支持通過 Docker、He…

Aerotech系列(3)開發庫介紹

庫對象模型 名空間列表 NamespaceDescriptionAerotech.A3200 The main namespace of the Aerotech A3200 .NET library Aerotech.A3200.Callbacks Contains the classes that allow interacting with callbacks Aerotech.A3200.Commands Contains the classes that allows …