07 docker 容器存儲持久化

目錄

1. Docker Volumes

特點

示例

2. Bind Mounts

特點

示例

@ 對比總結

3. tmpfs Mounts

4. Docker Storage Plugins

5. Kubernetes Persistent Volumes

6. Network Attached Storage (NAS) 和 Storage Area Network (SAN)


1. Docker Volumes

使用存儲卷進行存儲持久化

特點
  1. 獨立于容器生命周期:Volumes 存儲的數據獨立于容器生命周期,即使容器被刪除,數據依然保留。
  2. 管理便捷:Docker 提供了一些命令用于管理 Volumes,比如創建、刪除、列出等。
  3. 存儲位置:Volumes 存儲在 Docker 的管理目錄下(通常是/var/lib/docker/volumes/),用戶無需關心具體路徑。
  4. 支持跨平臺:Volumes 在不同的操作系統和 Docker 環境中具有一致的行為。
  5. 備份和恢復:Volumes 容易備份和恢復,因為它們獨立于容器且由 Docker 管理。
示例
#創建 Volume:
[root@rockylinux docker]# docker volume create addvimubuntu
addvimubuntu
-----------------------------------------------------
#查看卷詳細信息
[root@rockylinux docker]# docker volume inspect addvimubuntu
[{"CreatedAt": "2024-07-01T19:32:05+08:00","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/addvimubuntu/_data","Name": "addvimubuntu","Options": null,"Scope": "local"}
]
-----------------------------------------------------
#運行容器并掛載 Volume:
[root@rockylinux docker]# docker run  -d -it --volume addvimubuntu:/opt --name vim_demo registry.cn-hangzhou.aliyuncs.com/fujiangdocker2022/addvimubuntu:v1 /bin/bash
root@0f3f450684ed:/opt# touch 1.txt
root@0f3f450684ed:/opt# echo 1.txt > 1.txt
root@0f3f450684ed:/opt# echo hello > 2.txt[root@rockylinux _data]# pwd
/var/lib/docker/volumes/addvimubuntu/_data
[root@rockylinux _data]# ls
1.txt  2.txt
-----------------------------------------------------
#列出 Volumes:
docker volume ls/list
-----------------------------------------------------
#刪除 Volume:
[root@rockylinux _data]# docker volume rm addvimubuntu
# 刪除 Volume(需要先停止和刪除相關容器)
docker stop <container_id>

2. Bind Mounts

使用宿主機本地目錄進行存儲持久化

特點
  1. 直接使用宿主機目錄:Bind Mounts 直接將宿主機的一個目錄掛載到容器內的一個目錄。
  2. 高靈活性:可以選擇任意的宿主機目錄進行掛載。
  3. 依賴于宿主機文件系統結構:由于直接使用宿主機的路徑,Bind Mounts 的行為依賴于宿主機的文件系統結構和權限。
  4. 性能更高:因為直接訪問宿主機文件系統,性能可能會更高,特別是在高 I/O 場景下。
  5. 需要更高的權限管理:由于直接訪問宿主機目錄,容易出現權限問題和安全風險。
  6. 共享和重用,數據卷可以在容器之間共享或重用數據

容器數據卷就是目錄或文件,存在于一個或多個容器中,由docker掛載到容器,但不屬于聯合文件系統,因此能夠繞過UnionFS,提供一些用于持續存儲或共享數據。

特性:卷設計的目的就是數據的持久化,完全獨立于容器的生存周期,因此Docker不會在容器刪除時刪除其掛載的數據卷。

示例

docker run -it --privileged=true -v /宿主機絕對路徑目錄:/容器內目錄 鏡像名

Docker掛載主機目錄,可能會出現報錯:cannot open directory .: Perission denied

解決方案:在命令中加入參數 --privileged=true

CentOS7安全模塊比之前系統版本加強,不安全的會先禁止,目錄掛載的情況被默認為不安全的行為,在SELinux里面掛載目錄被禁止掉了。如果要開啟,一般使用 --privileged=true,擴大容器的權限解決掛載沒有權限的問題。也即使用該參數,容器內的root才擁有真正的root權限,否則容器內的root只是外部的一個普通用戶權限(不能讀寫)。

運行一個帶有容器卷存儲功能的容器實例:

docker run -it --privileged=true -v 宿主機絕對路徑目錄:容器內目錄[rw | ro] 鏡像名

可以使用docker inspect 容器id查看容器綁定的數據卷。

權限:

    • rw:讀寫 (默認)
    • ro:只讀。如果宿主機寫入內容,可以同步給容器內,容器內可以讀取。

容器卷的繼承:

# 啟動一個容器
docker run -it --privileged=true /tmp/test:/tmp/docker --name u1 ubuntu /bin/bash# 使用 --volumes-from 繼承 u1的容器卷映射配置
docker run -it --privileged=true --volumes-from u1 --name u2 ubuntu

--volumes-from 父類

這個選項允許新的容器從另一個已經存在的容器(稱為“父類”容器)中掛載卷。換句話說,新容器將繼承“父類”容器的卷,并且可以訪問這些卷中的數據

u2 容器將能夠訪問和使用 u1 容器中的 卷

繼承的是掛載的規則,即使u1掛了也不會影響u2,容器之間獨立。(u1恢復也不會影響)用于容器之間的共享

[root@rockylinux dockerdata]# docker run -it --privileged=true --volumes-from test3 --name test4 ubuntu
root@46c9ab85245e:/# cd /opt
root@46c9ab85245e:/opt# ls
fujiang.txt  love.txt  mount.test  test.txt  test3.txt

@ 對比總結

特性

Docker Volumes

Bind Mounts

存儲位置

Docker 管理的存儲位置(如 /var/lib/docker/volumes

宿主機上的指定路徑

獨立于容器生命周期

管理便捷性

高(Docker 提供了專門的管理命令)

低(需要手動管理宿主機目錄)

跨平臺一致性

否(依賴于宿主機文件系統)

性能

較高

高(直接訪問宿主機文件系統)

權限管理

簡單

復雜(需管理宿主機文件系統的權限)

3. tmpfs Mounts

tmpfs Mounts 將數據存儲在宿主機的內存中,而不是物理磁盤上。這種方法適用于需要快速訪問且數據不需要持久化的場景,例如緩存。

docker run -d --tmpfs /path/in/container my_image

4. Docker Storage Plugins

Docker 允許使用第三方存儲插件,以便與外部存儲系統(如 NFS、Ceph、GlusterFS 等)集成。這些插件提供了更高級的存儲功能,如分布式存儲、數據冗余和高可用性。

安裝存儲插件后,可以像使用 Volumes 一樣使用這些插件提供的存儲。

docker volume create --driver <plugin_name> my_volume
docker run -d -v my_volume:/path/in/container my_image

5. Kubernetes Persistent Volumes

在 Kubernetes 環境中,持久化存儲通常使用 Persistent Volumes(PV)和 Persistent Volume Claims(PVC)來管理。PV 是集群中的存儲資源,而 PVC 是用戶對 PV 的請求。

定義 Persistent Volume(PV):

apiVersion: v1
kind: PersistentVolume
metadata:name: my-pv
spec:capacity:storage: 1GiaccessModes:- ReadWriteOncehostPath:path: "/mnt/data"

定義 Persistent Volume Claim(PVC):

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: my-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 1Gi

使用 PVC:

apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: my-imagevolumeMounts:- mountPath: "/path/in/container"name: my-volumevolumes:- name: my-volumepersistentVolumeClaim:claimName: my-pvc

6. Network Attached Storage (NAS) 和 Storage Area Network (SAN)

在企業環境中,使用 NAS 或 SAN 設備提供集中化存儲是常見的做法。這些設備可以通過 NFS、iSCSI 等協議與容器進行連接,實現數據的集中存儲和管理。

在宿主機上掛載 NAS 或 SAN 存儲,然后將其掛載到容器中:

mount -t nfs <nas_server>:/path/on/nas /mnt/nas
docker run -d -v /mnt/nas:/path/in/container my_image

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

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

相關文章

什么是 API 代理?

API 代理就像是您的計算機和互聯網上特殊服務之間的中間人。它有點像集翻譯、保安和信使于一體。 什么是 API 代理&#xff1f; API 代理就像是您和在線服務之間的中間人。當您的計算機需要從某個特殊的在線服務 (API) 獲得某些東西時&#xff0c;API 代理會確保一切順利進行…

Eslint與Prettier搭配使用

目錄 前置準備 Eslint配置 Prettier配置 解決沖突 前置準備 首先需要安裝對應的插件 然后配置settings.json 點開之后就會進入settings.json文件里&#xff0c;加上這兩個配置 // 保存的時候自動格式化 "editor.formatOnSave": true, // 保存的時候使用prettier進…

1.2 ROS2安裝

1.2.1 安裝ROS2 整體而言&#xff0c;ROS2的安裝步驟不算復雜&#xff0c;大致步驟如下&#xff1a; 準備1&#xff1a;設置語言環境&#xff1b;準備2&#xff1a;啟動Ubuntu universe存儲庫&#xff1b;設置軟件源&#xff1b;安裝ROS2&#xff1b;配置環境。 請注意&…

拓撲學習系列(2)同調群、同倫群與基本群

同調群 同調群是拓撲空間的一個重要不變量&#xff0c;用于研究空間的“洞”的結構。同調群描述了拓撲空間中的閉合曲線、曲面等的性質&#xff0c;是拓撲學中的一個重要工具。以下是對同調群的詳細描述&#xff1a; 定義&#xff1a; 給定一個拓撲空間 X&#xff0c;對于每個…

【分布式系統】監控平臺Zabbix對接grafana

以前兩篇博客為基礎 【分布式系統】監控平臺Zabbix介紹與部署&#xff08;命令截圖版&#xff09;-CSDN博客 【分布式系統】監控平臺Zabbix自定義模版配置-CSDN博客 一.安裝grafana并啟動 添加一臺服務器192.168.80.104 初始化操作 systemctl disable --now firewalld set…

LeetCode 算法:路徑總和 III c++

原題鏈接&#x1f517;&#xff1a;路徑總和 III 難度&#xff1a;中等???? 題目 給定一個二叉樹的根節點 root &#xff0c;和一個整數 targetSum &#xff0c;求該二叉樹里節點值之和等于 targetSum 的 路徑 的數目。 路徑 不需要從根節點開始&#xff0c;也不需要在葉…

操作系統調度算法、頁面置換算法總結

常見的進程調度算法 FCFS:非搶占、先來先服務。 對短進程不利。 優先級調度算法:在支持搶占的系統中,當新進程進入就緒隊列時,如果它的優先級高于當前運行進程的優先級,那么就會搶占CPU;在非搶占系統中,只是將新進程加入了就緒隊列中。 最短作業優先調度算法(SJF) …

去中心化經濟的革新:探索Web3的新商業模式

隨著區塊鏈技術的發展&#xff0c;Web3正逐漸成為全球經濟和商業模式的關鍵詞之一。Web3不僅僅是技術的革新&#xff0c;更是對傳統中心化商業模式的挑戰和重構。本文將深入探討Web3背后的概念、關鍵技術以及其帶來的新商業模式&#xff0c;帶領讀者走進這一新興領域的深度分析…

272. 最長公共上升子序列

Powered by:NEFU AB-IN Link 文章目錄 272. 最長公共上升子序列題意思路代碼 272. 最長公共上升子序列 題意 如題 思路 若按這個思路的話&#xff0c;代碼為 O ( n 3 ) O(n^3) O(n3) for (int i 1; i < n; i ) {for (int j 1; j < n; j ){f[i][j] f[i - 1][j];…

SpringSecurity中文文檔(Servlet Password Storage)

存儲機制&#xff08;Storage Mechanisms&#xff09; 每種支持的讀取用戶名和密碼的機制都可以使用任何支持的存儲機制&#xff1a; Simple Storage with In-Memory AuthenticationRelational Databases with JDBC AuthenticationCustom data stores with UserDetailsServic…

Cube大小與性能的博弈:Kylin查詢性能優化指南

Cube大小與性能的博弈&#xff1a;Kylin查詢性能優化指南 在Apache Kylin的多維數據分析世界中&#xff0c;Cube是核心組件&#xff0c;它直接影響查詢性能和系統資源的使用。理解Cube大小與查詢性能之間的關系對于構建高效的數據分析平臺至關重要。本文將深入探討Kylin中Cube…

FW SystemUI Keyguard解析(二)

文章目錄 CTS之Keyguard Menu事件處理 CTS之Keyguard Menu事件處理 事件觸發點: NotificationShadeWindowViewController.dispatchKeyEvent 設置setInteractionEventHandler回調之后通過NotificationShadeWindowView 觸發 調用到return mService.onMenuPressed(); public cla…

31-Pandas index操作索引

Pandas index操作索引 索引&#xff08;index&#xff09;是 Pandas 的重要工具&#xff0c;通過索引可以從 DataFame 中選擇特定的行數和列數&#xff0c;這種選擇數據的方式稱為“子集選擇”。 在 Pandas 中&#xff0c;索引值也被稱為標簽&#xff08;label&#xff09;&a…

簡單的text/html無法解析解決記錄

簡單的text/html無法解析解決記錄 1. bug發現 我們所有的服務都是微服務&#xff0c;服務間調用都是使用feign接口進行調用&#xff0c;正常調用都沒有問題&#xff0c;但是某一天發現部分從esb服務調用過來到我們本地的服務&#xff0c;本地服務再使用feign接口調用其他微服…

DPO算法推導

DPO 核心思想&#xff1a;直接使用偏好數據進行策略優化&#xff0c;省去 reward 模型策略優化。 技術背景知識&#xff1a; 首先給定prompt x&#xff0c;生成兩個答案 ( y 1 , y 2 ) Π S F T ( y ∣ x ) (y_1,y_2)~\Pi^{SFT}(y|x) (y1?,y2?) ΠSFT(y∣x) &#xff0c;并通…

2. Python+Playwright playwright的API

Playwright支持同步和異步兩種API&#xff0c;使用異步API需要導入asyncio庫&#xff0c;它是一個可以用來實現Python協程的庫&#xff0c;更詳細介紹可參考Python協程 。我們可以根據自己的偏好選擇適合的模式。 同步與異步模式原理 同步操作方式&#xff1a;在代碼執行時&am…

c++的const

const在C中是一個非常重要的關鍵字&#xff0c;用于定義不可變的變量、函數參數、成員函數等。它可以提高代碼的可讀性、安全性&#xff0c;并幫助編譯器進行優化。 定義常量 使用const定義不可變的變量&#xff1a; const int MAX_SIZE 100;常量指針 指向常量的指針和常量…

【ARMv8/v9 GIC 系列 5 -- GIC GICD_CTRL 使用詳細介紹】

文章目錄 GICD_CTRLGICD_CTLR 寄存器結構RWP&#xff08;Register Write Pending&#xff09;E1NWF&#xff08;Enable 1 of N Wakeup Functionality&#xff09;DS&#xff08;Disable Security&#xff09; 親和性路由&#xff08;Affinity Routing&#xff09;ARE_NSARE_S 中…

【java計算機畢設】服裝生產管理系統java MySQL springboot vue html maven項目設計源代碼+萬字文檔

目錄 1項目功能 2項目介紹 3項目地址 1項目功能 【java計算機畢設】服裝生產管理系統java MySQL springboot vue html maven項目代碼文檔 2項目介紹 系統功能&#xff1a; 服裝生產管理系統包括管理員、用戶兩種角色。 管理員功能包括個人中心模塊用于修改個人信息和密碼&a…

【UE5.3】筆記6-創建可自由控制Pawn類

搭建場景 搭建一個場景&#xff1a;包含地板、圍墻。可以根據喜好加一些自發光的效果。 增加食物 創建食物藍圖類&#xff0c;在場景里放置一些食物以供我們player去吃掉獲取分值。 創建可控制的layer 我們先右鍵創建一個藍圖繼承自pawn類&#xff0c;起名BP_Player&#xf…