Docker存儲卷(Volume)核心概念、類型與操作指南

文章目錄

  • 一、存儲卷概念
  • 二、存儲卷分類
    • 2.1 管理卷
    • 2.2 綁定數據卷
    • 2.3 臨時數據卷
  • 三、MySQL災難恢復
  • 四、存儲卷的局限性

一、存儲卷概念

什么是存儲卷?
??Docker 存儲卷 是 Docker 容器中用于持久化存儲數據的獨立文件系統區域。它獨立于容器的聯合文件系統,其生命周期可以完全獨立于創建它的容器。簡單來說,可以把它理解成容器中的一個共享文件夾或外部硬盤,這個文件夾直接映射到主機(或其它遠程存儲)上的一個真實目錄。

為什么要使用存儲卷?

  1. 容器銷毀或誤操作等會導致數據丟失,而存儲卷就可以起到一個數據備份的作用。
  2. 宿主機和容器,容器和容器,它們之間文件系統是相互隔離的,要完成數據交互很麻煩,而存儲卷起到一個交通樞紐的功能,或者說相當于一個“共享目錄”。

二、存儲卷分類

Docker 提供了三種方式將數據從宿主機掛載到容器中:
??管理卷(volume docker 。默認映射到宿主機的/var/lib/docker/volumes目錄下,只需要在容器內指定容器的掛載點是什么,而被綁定宿主機下的那個目錄,是由容器引擎 daemon自行創建一個空的目錄,或者使用一個已經存在的目錄,與存儲卷建立存儲關系,這種方式極大解脫用戶在使用卷時的耦合關系,缺陷是用戶無法指定那些使用目錄,臨時存儲比較適合;
??綁定數據卷(bind mount。映射到宿主機指定路徑下,在宿主機上的路徑要人工的指定一個特定的路徑,在容器中也需要指定一個特定的路徑,兩個已知的路徑建立關聯關系。
??臨時數據卷(tmpfs mount.映射到于宿主機內存中,一旦容器停止運行,tmpfs mounts 會被移除,數據就會丟失,用于高性能的臨時數據存儲。

2.1 管理卷

創建卷
方法一:Volume命令操作

命令清單:

  • docker volume create:創建存儲卷
  • docker volume inspect:顯示存儲卷詳細信息
  • docker volume ls: 列出存儲卷
  • docker volume prune:清理所有無用數據卷
  • docker volume rm:刪除卷,使用中的無法刪除

示例:在這里插入圖片描述

  • 注:docker volume create不加卷名稱,生成匿名存儲卷
  • 注:docker volume inspect支持查看多個存儲卷
  • 注:docker volume rmdocker volume prune-f選項表示強制刪除

方法二:-v 或者–mount 指定
docker run創建并啟動容器時添加-v--mount 都可以完成管理卷的創建和掛載
-v 選項
功能:完成目錄映射
語法:

docker run -v name:directory[:options]

參數:

  • 第一個參數:卷名稱
  • 第二個參數:卷映射到容器的目錄
  • 第三個參數:選項,如 ro 表示 readonly

示例:
在這里插入圖片描述
效果:
在這里插入圖片描述

–mount選項

功能:完成目錄映射
語法:

--mount '<key>=<value>,<key>=<value>'

關鍵參數:

  • type:類型表示 bind, volume, or tmpfs
  • source,src:對于命名卷,這是卷的名稱。對于匿名卷,省略此字段
  • destination,dst,target:文件或目錄掛載在容器中的路徑
  • ro,readonly:只讀方式掛載

示例:

docker run -d --name myweb2 --mount 'src=myweb2,dst=/usr/share/nginx/html' nginx:1.24.0

在這里插入圖片描述
效果和-v選項相同

  • 注意1:添加ro選項限制的是容器里的寫權限。
  • 注意2:容器刪除卷的數據不會刪除,除非用 docker volume rm 刪除。因為卷本身就是來保護數據的。
  • 注意3:卷共享。不同容器可以使用同一個卷,解決了容器與容器之間數據交互繁瑣的問題。

2.2 綁定數據卷

綁定卷 bind mount-v--mount 都可以完成綁定卷的創建
-v 選項
功能:完成卷映射
語法:

docker run -v name:directory[:options] ………

在這里插入圖片描述

  • 注意1:-v選項下,如果宿主機沒有對應的目錄,會自動創建,而–mount則會掛載失敗。
  • 注意2:與管理卷不同,容器目錄原有數據會被清空,同步成宿主機目錄下的數據。
  • 注意3:ro限制的是宿主機的寫操作。

–mount選項
功能:完成目錄映射
語法:

--mount '<key>=<value>,<key>=<value>'

關鍵參數:

  • type: 類型表示 bind, volume, or tmpfs
  • source, src: 宿主機目錄,這個和管理卷是不一樣的
  • destination, dst,target: 文件或目錄掛載在容器中的路徑
  • ro,readonly: 只讀方式掛載

示例:

docker run -d --name=myweb3 --mount 
type=bind,src=/home/qsy/gitDocker/data/test2
,dst=/usr/share/nginx/html nginx:1.24.0

注意:在命令行中不能像這個把指令分行寫(必須寫在一行),這里只是方便展示。
效果同-v選項。

特性管理卷綁定卷
創建者Docker用戶自己
存儲位置Docker管理的區域用戶指定的任何目錄
控制權Docker用戶
移植性
典型用途數據庫數據、應用程序產生的需要持久化的數據配置文件、源代碼、日志文件(在主機和容器間共享)
備份與遷移使用 docker volume 命令操作,相對簡單需要操作主機文件系統,復雜度高

2.3 臨時數據卷

臨時卷 tmpfs臨時卷數據位于內存中,在容器和宿主機之外(僅在容器運行期間存在)。

局限性

  • 不同于管理卷和綁定卷,不能在容器之間共享 tmpfs 掛載
  • 這個功能只有在 Linux 上運行 Docker 時才可用

創建卷
方法一:
–tmpfs選項
功能:完成臨時卷映射
語法:

--tmpfs /app
  • 注意1:數據在宿主機內存里,/app是容器目錄。如果該目錄不存在則會創建。
  • 注意2:該容器的目錄會被清空。
  • 注意3:當容器重啟后,tmpfs目錄會被銷毀,或恢復成原來的樣子。

示例:

docker run -d --name=myweb4 --tmpfs /test1 nginx:1.24.0

在這里插入圖片描述

方法二:
--mount選項
功能:完成目錄映射
語法:

--mount '<key>=<value>,<key>=<value>'

關鍵參數:

  • type:類型表示 bind, volume, or tmpfs
  • destination,dst,target:掛載在容器中的路徑
  • tmpfs-sizetmpfs 掛載的大小(以字節為單位)。默認無限制。
  • tmpfs-modetmpfs 的八進制文件模式。例如,700 或 0770。默認為 1777 或全局可寫。

示例:

docker run -d --name=myweb5 --mount type=tmpfs,dst=/usr/share/nginx/html nginx:1.24.1

三、MySQL災難恢復

接下來我們演示把數據庫容器數據丟失,然后通過存儲卷恢復的過程,分為以下幾步:

  1. 掛載存儲卷
  2. 模擬數據生產
  3. 刪除數據庫容器
  4. 恢復數據
  5. 登錄mysql并查看數據是否恢復

創建mysql容器并掛載:

docker run -d --name 容器的名字 -v 宿主機目錄:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=數據庫密碼 mysql:版本號

在這里插入圖片描述
模擬數據庫存儲:
在這里插入圖片描述
刪除mysql容器
在這里插入圖片描述

恢復數據(數據都在宿主機目錄下,再用同樣的方式掛載就行)
在這里插入圖片描述
登錄數據庫查看數據是否恢復:
在這里插入圖片描述

四、存儲卷的局限性

  1. 數據生命周期與容器分離:這既是一個優點,也是一個缺點。卷的生命周期獨立于容器,即使刪除了所有使用該卷的容器,卷及其數據仍然存在。它有效的保護了容器的數據,但很容易導致“孤兒卷”或“僵尸卷”堆積,占用大量磁盤空間,如果不手動清理,會造成資源浪費。
  2. 可移植性挑戰:卷本身在創建時是“空白”的,其內容通常由容器在運行時填充。你不能像鏡像一樣,輕松地將一個包含數據的卷從一個環境(如開發機)直接“復制”或“遷移”到另一個環境(如生產服務器)。
  3. 備份和遷移流程復雜:備份一個正在被容器使用的活躍卷存在數據一致性的風險(例如,數據庫文件可能在備份過程中被修改)。標準的 Docker 命令沒有提供一鍵式的卷備份功能。
  4. 空間分配不靈活:Docker 卷默認使用宿主機的存儲空間,你無法像在虛擬機中那樣,輕松地為單個卷設置大小限制。一個失控的容器進程(例如,日志瘋狂輸出)可能會寫滿整個卷,進而占滿宿主機的磁盤空間,導致宿主機和其他容器都出現問題。
  5. 安全性與訪問控制:卷中的數據默認由容器的用戶(通常是 root)擁有和寫入。如果容器以特權模式運行或被攻破,攻擊者可以通過卷對宿主機文件系統造成破壞(盡管比綁定掛載更安全)。

非常感謝您能耐心讀完這篇文章。倘若您從中有所收獲,還望多多支持呀!在這里插入圖片描述

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

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

相關文章

Electron 原生模塊集成:使用 N-API

引言&#xff1a;原生模塊集成在 Electron 開發中的 N-API 核心作用與必要性 在 Electron 框架的擴展開發中&#xff0c;原生模塊集成是提升應用性能和功能邊界的關鍵技術&#xff0c;特別是使用 N-API&#xff08;Node-API&#xff09;編寫和集成 C 原生模塊&#xff0c;更是 …

android組包時會把從maven私服獲取的包下載到本地嗎

Android項目在構建&#xff08;組包&#xff09;時&#xff0c;Gradle會自動將從Maven私服&#xff08;或任何配置的倉庫&#xff09;獲取的依賴包&#xff08;AAR、JAR等&#xff09;下載到本地的Gradle緩存目錄中。 下面詳細解釋這個過程和相關的概念&#xff1a; 詳細過程聲…

【應用筆記】構建具有增強識別、防欺騙和說話人識別功能的高級語音用戶界面--瑞薩電子

Suad Jusuf&#xff08;Director Product Marketing and Strategy, Renesas AI Center of Excellence&#xff09;&#xff1a;語音用戶界面&#xff08;VUI&#xff09;正在徹底改變我們與技術交互的方式&#xff0c;實現免提、無縫的通信。通過整合先進語音命令識別功能&…

DAY 26 函數專題1:函數定義與參數-2025.9.13

DAY 26 函數專題1&#xff1a;函數定義與參數 知識點回顧&#xff1a; 函數的定義變量作用域&#xff1a;局部變量和全局變量函數的參數類型&#xff1a;位置參數、默認參數、不定參數傳遞參數的手段&#xff1a;關鍵詞參數傳遞參數的順序&#xff1a;同時出現三種參數類型時…

芯昇XS9922C可替代TP9932和TP9930:國產四核高清解碼芯片,開啟車載視覺處理新紀元 ——從像素級解析到全鏈路集成,重新定義智能駕駛感知核心

引言&#xff1a;車載視覺的“芯”革命 在智能駕駛技術飛速演進的今天&#xff0c;高清視頻采集與實時處理已成為車輛環境感知的“神經中樞”。傳統解碼方案面臨傳輸距離有限、多芯片集成度低、音視頻同步難等痛點&#xff0c;制約著車載環視、盲區檢測等關鍵功能的性能突破。X…

百度競價推廣:百度搜索競價推廣代運營

在數字化營銷浪潮中&#xff0c;百度競價推廣憑借其強大的流量優勢和精準觸達能力&#xff0c;成為企業獲取客戶的核心渠道之一。然而&#xff0c;面對復雜的賬戶管理、激烈的關鍵詞競爭以及動態變化的市場環境&#xff0c;許多企業選擇將專業的事交給專業的人——通過代運營團…

開源端到端訓練多模態大模型LLaVA 深度拆解

注&#xff1a;此文章內容均節選自充電了么創始人&#xff0c;CEO兼CTO陳敬雷老師的新書《GPT多模態大模型與AI Agent智能體》&#xff08;跟我一起學人工智能&#xff09;【陳敬雷編著】【清華大學出版社】 清華《GPT多模態大模型與AI Agent智能體》書籍配套視頻課程【陳敬雷…

排序算法(Java)

目錄 前言 常見的排序算法實現&#xff1a; 1. 冒泡排序 思路分析&#xff1a; 代碼實現&#xff1a; 2.選擇排序 思路分析&#xff1a; 代碼實現&#xff1a; 3.插入排序 思路分析&#xff1a; 代碼實現&#xff1a; 4.快速排序 思路分析&#xff1a; 代碼實現&…

深度學習打卡第N6周:中文文本分類-Pytorch實現

&#x1f368; 本文為&#x1f517;365天深度學習訓練營中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 一、準備工作 數據格式&#xff1a; import torch from torch import nn import torchvision from torchvision import transforms,datasets import os,PIL,p…

【代碼隨想錄day 24】 力扣 90. 集合II

視頻講解&#xff1a;https://www.bilibili.com/video/BV1vm4y1F71J/?vd_sourcea935eaede74a204ec74fd041b917810c 文檔講解&#xff1a;https://programmercarl.com/0090.%E5%AD%90%E9%9B%86II.html#%E6%80%9D%E8%B7%AF 力扣題目&#xff1a;https://leetcode.cn/problems/su…

.NET 6 文件下載

.NET 6 API中實現文件的下載。創建HttpHeaderConstant用于指定http頭。public sealed class HttpHeaderConstant{public const string RESPONSE_HEADER_CONTENTTYPE_STREAM "application/octet-stream";public const string RESPONSE_HEADER_NAME_FILENAME "f…

[數據結構——lesson6.棧]

目錄 引言 1.棧的概念和結構 棧的核心概念 棧的結構 2.棧的實現 2.1棧的實現方式 2.2棧的功能 2.3棧的聲明 1.順序棧 2。鏈式棧 2.4棧的功能實現 1.棧的初始化 2.判斷棧是否為空 3.返回棧頂元素 4.返回棧的大小 5.元素入棧 6.元素出棧 7.打印棧的元素 8.銷毀…

華為HICE云計算的含金量高嗎?

在數字時代的今天&#xff0c;云計算技術證飛速的發展成為企業數字化轉型的重要支撐。而華為作為領先的通信和信息技術公司&#xff0c;推出的HCIE云計算認證備受關注。接下來就來說說華為HCIE云計算認證的含金量到底有多高。HCIE認證被認為是華為認證中的最高等級&#xff0c;…

OSPF協議原理講解和實際配置(華為/思科)

OSPF&#xff08;open shorest path first&#xff0c;開放最短路徑優先&#xff09;是一種動態的&#xff0c;基于鏈路狀態的動態路由協議&#xff0c;廣泛的應用在企業網絡中&#xff0c;通過維護網絡拓撲信息&#xff0c;利用 Dijkstra 算法實現最短路徑&#xff0c;實現高效…

【開題答辯全過程】以 《黃帝內經》問答系統為例,包含答辯的問題和答案

個人簡介一名14年經驗的資深畢設內行人&#xff0c;語言擅長Java、php、微信小程序、Python、Golang、安卓Android等開發項目包括大數據、深度學習、網站、小程序、安卓、算法。平常會做一些項目定制化開發、代碼講解、答辯教學、文檔編寫、也懂一些降重方面的技巧。感謝大家的…

npm : 無法加載文件 C:\Program Files\nodejs\npm.ps1,因為在此系統上禁止運行腳

這個錯誤是由于 PowerShell 的執行策略限制&#xff0c;導致無法運行腳本。你可以通過以下步驟解決這個問題&#xff1a; 1. 查看當前的執行策略 打開 PowerShell&#xff0c;以管理員身份運行&#xff0c;輸入以下命令查看當前的執行策略&#xff1a; Get-ExecutionPolicy如果…

macOS蘋果電腦運行向日葵遠程控制軟件閃退

文章目錄問題原因分析修復附錄向日葵字太小按Ctrl鍵會彈出開始菜單的問題問題 向日葵是一款遠程控制的應用&#xff0c;在macOS下也能運行&#xff0c; 本來用的好好的&#xff0c;有一天升級后突然就運行不起來了&#xff0c;一點開能顯示幾秒首界面&#xff0c;立馬就自動退…

Linux dma-buf 框架原理、實現與應用詳解

1. 背景與意義 1.1 異構系統與緩沖區共享的挑戰 在現代 SoC、嵌入式、圖形和多媒體系統中&#xff0c;CPU、GPU、VPU、ISP、DMA 控制器等多個硬件單元需要高效地共享和傳遞大塊數據&#xff08;如圖像幀、視頻流、AI 張量等&#xff09;。如果每個設備都維護獨立的緩沖區&…

Scikit-learn Python機器學習 - 分類算法 - 樸素貝葉斯

鋒哥原創的Scikit-learn Python機器學習視頻教程&#xff1a; https://www.bilibili.com/video/BV11reUzEEPH 課程介紹 ? 本課程主要講解基于Scikit-learn的Python機器學習知識&#xff0c;包括機器學習概述&#xff0c;特征工程(數據集&#xff0c;特征抽取&#xff0c;特…

如何免費股票數據API(第13期):滬深A股《最新分時交易》數據獲取大全:附Python、Java等多語言實戰教程與接口文檔說明

在金融科技迅猛發展的今天&#xff0c;股票量化分析以其嚴謹的科學性和強大的系統性&#xff0c;正日益成為投資領域的主流方法論。任何卓越的量化模型的誕生&#xff0c;都離不開全面、精準、及時的數據支撐。無論是躍動著的實時交易數據、沉淀了歷史規律的K線走勢&#xff0c…