Docker 數據持久化完全指南:Volume、Bind Mount 與匿名卷

Docker 數據持久化完全指南:Volume、Bind Mount 與匿名卷

引言

在 Docker 中,容器的文件系統默認是臨時的,容器刪除后數據也會丟失。為了實現數據持久化,Docker 提供了多種存儲方式,主要包括:

  1. docker volume create + 掛載(Named Volume)
  2. 直接 -v 掛載宿主機目錄(Bind Mount)
  3. 匿名卷(Anonymous Volume)
  4. 孤兒卷(Orphaned Volume)

本文將從 使用方式、適用場景、優缺點 等方面詳細對比這些方法,并給出最佳實踐建議。


1. docker volume create + 掛載(Named Volume)

特點

  • 顯式創建:先通過 docker volume create 創建命名卷,再掛載到容器。
  • 集中管理:可通過 docker volume ls/inspect 查看和管理。
  • 數據持久化:刪除容器時,卷不會自動刪除,需手動清理。
  • 跨容器共享:多個容器可掛載同一個卷。

示例

# 1. 創建命名卷
docker volume create mydata# 2. 掛載到容器
docker run -d -v mydata:/app/data --name myapp nginx# 3. 查看卷信息
docker volume inspect mydata

適用場景

? 數據庫(MySQL、PostgreSQL)
? ??應用持久化數據(Nexus、Jenkins)??
? ??多容器共享數據(如日志、緩存)??

優點

? Docker 自動管理權限,兼容 Linux/Windows
? 數據獨立于容器,刪除容器不影響數據
? 適合生產環境

缺點

? 需要手動清理不再使用的卷


2. 直接 -v 掛載宿主機目錄(Bind Mount)

特點

  • 直接綁定宿主機目錄-v /宿主機路徑:/容器路徑
  • 完全控制:數據存儲在宿主機,可直接修改。
  • 權限依賴宿主機:需手動處理 SELinux、文件權限。

示例

# 1. 創建宿主機目錄
mkdir -p /data/nginx# 2. 掛載到容器
docker run -d -v /data/nginx:/usr/share/nginx/html --name nginx nginx

適用場景

? 開發調試(直接修改代碼)
? ??配置文件掛載(如 nginx.conf)??
? ??需要宿主機直接訪問數據(如備份)??

優點

? 數據完全由宿主機管理,方便直接操作
? 適合開發和調試

缺點

? 權限問題可能導致容器無法訪問(需 chmod/chown
? 跨平臺兼容性較差(Windows/macOS 路徑差異)


3. 匿名卷(Anonymous Volume)

特點

  • 隱式創建-v /容器路徑,Docker 自動生成隨機卷名(如 f1a2b3c4...)。
  • 生命周期短:刪除容器后可能成為孤兒卷。

示例

docker run -d -v /var/lib/mysql --name mysql mysql:8.0

適用場景

?? 臨時測試(不推薦生產環境)
?? ??某些官方鏡像默認使用(如 MySQL 的 /var/lib/mysql)??

優點

? 快速創建,無需手動管理

缺點

? 難以追蹤和管理
? 容易產生孤兒卷


4. 孤兒卷(Orphaned Volume)

什么是孤兒卷?

當容器被刪除,但未使用 --volumes 清理關聯卷時,這些卷會變成 孤兒卷,占用磁盤空間。

如何清理?

# 查看所有卷(包括孤兒卷)
docker volume ls# 清理未使用的卷
docker volume prune

如何避免?

  • 刪除容器時加上

    --volumes
    

    docker rm -fv mycontainer
    
  • 盡量使用 docker volume create 管理命名卷。


5. 對比總結

存儲方式創建方式管理難度數據持久化適用場景
Named Volumedocker volume create容易生產環境、數據庫
Bind Mount-v /宿主機路徑:/容器路徑中等開發調試、配置文件
Anonymous Volume-v /容器路徑困難臨時測試
Orphaned Volume容器刪除后遺留困難需手動清理

6. 最佳實踐建議

  1. 生產環境:使用 Named Volumedocker volume create),確保數據安全。
  2. 開發環境:使用 Bind Mount,方便直接修改代碼或配置。
  3. 避免匿名卷:除非是臨時測試,否則盡量使用命名卷。
  4. 定期清理孤兒卷:運行 docker volume prune 釋放磁盤空間。

結論

Docker 提供了多種數據持久化方式,選擇合適的方式取決于你的使用場景:

  • 需要穩定、易管理?Named Volume
  • 需要直接修改文件?Bind Mount
  • 臨時使用?匿名卷(但慎用)

正確使用這些存儲方式,可以確保數據安全,同時避免磁盤空間浪費。

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

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

相關文章

OSS跨區域復制災備方案:華東1到華南1的數據同步與故障切換演練

1. 引言 對象存儲服務(OSS)已成為現代數據架構的核心組件。隨著業務全球化,跨區域數據災備從“可選”變為“必選”。本文以阿里云OSS為實驗環境,實戰演練華東1(杭州)到華南1(深圳)的…

前端登錄狀態管理:主流方案對比與安全實踐指南

根據目前業內前端登錄狀態管理的主流設計方案,及其演進趨勢進行匯總,生成主要包括如下內容的報告: 登錄狀態保持的基礎原理:從HTTP無狀態問題出發解析技術需求,使用表格對比核心挑戰。主流技術方案對比:詳…

動手用 Web 實現一個 2048 游戲

文章目錄 為什么選擇 2048?關鍵技術點與算法詳解HTML 結構:搭建游戲界面CSS 樣式:美化游戲界面JavaScript 核心邏輯:驅動游戲運行1)數據結構:二維數組表示游戲網格2)核心算法:添加隨…

frp v0.62.1內網穿透搭建和使用

官網:https://gofrp.org/zh-cn/ Github:https://github.com/fatedier/frp 開源項目 frp frp 是一種快速反向代理,允許您將位于 NAT 或防火墻后面的本地服務器公開給 Internet。目前支持 TCP 和 UDP,以及 HTTP 和 HTTPS 協議&…

如何使用 USB 數據線將文件從 PC 傳輸到 iPhone

雖然用 USB 數據線將文件從 PC 傳輸到安卓設備非常容易,但對于 iPhone 用戶來說,情況就不同了。不過,幸運的是,我們找到了三種可靠的方法,可以使用 USB 數據線將文件從 PC 傳輸到 iPhone,讓您輕松完成這項任…

【C++高階三】AVL樹深度剖析

【C高階三】AVL樹深度剖析 1.什么是AVL樹2.AVL樹的實現2.1節點類和基本結構2.2插入2.3旋轉處理2.3.1左單旋2.3.2右單旋2.3.3左右雙旋2.3.4右左雙旋 1.什么是AVL樹 AVL樹也叫二叉搜索平衡樹 因為二叉搜索樹如果插入順序是有序的,那么這棵樹的查找效率將會是O(N)&…

LangChain 文本分割器深度解析:從原理到落地應用(上)

食用指南 LangChain 作為大語言模型應用開發框架,文本分割器是其核心組件之一,本文以此作為切入點,詳細介紹文本分割的作用、策略、以及常見的文本切割器應用。考慮到篇幅過長,故拆分為上、中、下三篇,后續會在中篇介…

【Java高頻面試問題】高并發篇

【Java高頻面試問題】高并發篇 Kafka原理核心組件高吞吐核心機制高可用設計 Kafka 如何保證消息不丟失如何解決Kafka重復消費一、生產者端:根源防重二、消費者端:精準控制三、業務層:冪等性設計(核心方案) 如何解決Kaf…

關于結構體,排序,遞推的詳細講解(從屬于GESP四級)

本章內容 排序算法基礎 結構體 遞推 簡單雙指針 一、排序算法基礎三劍客 冒泡 Bubble、選擇 Selection、插入 Insertion 1. 預備知識 1.1 排序算法評價指標 指標 含義 影響答題的典型問法 時間復雜度 算法在最壞、平均或最好情況下所需比較 / 交換次數 “寫出此算法…

離線部署docker中的containerd服務

containerd 是一個行業標準的容器運行時,專注于簡單、健壯的容器執行。它是從 Docker 中分離出來的項目,旨在作為一個底層的運行時接口,供更高層次的容器管理層使用。 containerd 負責鏡像傳輸、存儲、容器執行、網絡配置等工作。它向上為 Do…

web布局15

CSS 網格布局除了提供定義網格和放置網格項目的相關屬性之外,也提供了一些控制對齊方式的屬性。這些控制對齊方式的屬性,和 Flexbox 布局中的對齊屬性 justify-* 、align-* 、*-items 、*-content 、 *-self 等是相似的: 在網格布局中可以用它…

leetcode 291. Word Pattern II和290. Word Pattern

目錄 291. Word Pattern II 290. Word Pattern 291. Word Pattern II 回溯法哈希表 class Solution {unordered_map<char,string> hashmap;unordered_set<string> wordset; public:bool wordPatternMatch(string pattern, string s) {return backtrack(pattern,…

大模型的開發應用(十三):基于RAG的法律助手項目(上):總體流程簡易實現

RAG法律助手項目&#xff08;上&#xff09;&#xff1a;總體流程簡易實現 1 項目介紹1.1 方案選型1.2 知識文檔 2 文檔解析3 知識庫構建3.1 構建知識節點3.2 嵌入向量初始化3.2 向量存儲 4 查詢4.1 初始化大模型4.2 模型響應4.2 本文程序存在的問題 完整代碼 1 項目介紹 本項…

覆蓋遷移工具選型、增量同步策略與數據一致性校驗

1 引言 在當今數據驅動的時代&#xff0c;數據遷移已成為系統迭代、數據庫升級、云遷移和架構演進中的關鍵環節。根據Gartner的調研&#xff0c;超過70%的企業級數據遷移項目因工具選擇不當或同步策略缺陷而延期或失敗。數據遷移不僅僅是簡單的數據搬運&#xff0c;而是涉及數…

`docker run -it --rm` 筆記250624

docker run -it --rm 筆記250624 docker run -it --rm 是一個強大且常用的 Docker 命令組合&#xff0c;特別適合交互式開發和調試場景。以下是詳細解析和使用指南&#xff1a; 參數解析 參數作用典型場景-i保持 STDIN 打開&#xff08;交互模式&#xff09;需要輸入命令的交…

解鎖阿里云AnalyticDB:數據倉庫的革新利器

AnalyticDB&#xff1a;云數據倉庫新勢力 在數字化浪潮中&#xff0c;數據已成為企業的核心資產&#xff0c;而云數據倉庫作為數據管理與分析的關鍵基礎設施&#xff0c;正扮演著愈發重要的角色。阿里云 AnalyticDB 作為云數據倉庫領域的佼佼者&#xff0c;以其卓越的性能、創…

【PX30 Qt 5.15 交叉編譯環境搭建完整指南】

PX30 Qt 5.15 交叉編譯環境搭建完整指南 (Ubuntu 20.04 → PX30 aarch64) &#x1f3af; 項目概覽 本指南詳細記錄了在Ubuntu 20.04上搭建針對Rockchip PX30的Qt 5.15.2交叉編譯環境的完整過程&#xff0c;包括實際操作步驟、遇到的問題及解決方案。 目標平臺: Rockchip PX3…

深入理解讀寫鎖 ReadWriteLock

在高性能并發編程中&#xff0c;如何有效地管理共享資源的訪問是核心挑戰之一。傳統的排他鎖&#xff08;如ReentrantLock&#xff09;在讀多寫少的場景下&#xff0c;性能瓶頸尤為突出&#xff0c;因為它不允許并發讀取。Java并發包&#xff08;java.util.concurrent.locks&am…

Unity Addressable使用之檢測更新流程

補充知識 關鍵文件說明 Addressable打包后會生成多種文件&#xff0c;主要包括 .hash、.json 和 .bundle 文件&#xff0c;它們各自有不同的作用。 .hash 文件&#xff08;哈希文件&#xff09; 作用&#xff1a; 用于 版本對比&#xff0c;檢查資源是否有更新。存儲的是 資…

Elasticsearch 中實現推薦搜索(方案設想)

1. 存儲商品數據的數據類型 為了支持推薦搜索&#xff0c;商品數據通常需要包含以下字段&#xff1a; 商品索引結構 PUT /products {"mappings": {"properties": {"product_id": {"type": "keyword" // 商品 ID},"…