005.Docker存儲管理

来源:https://www.cnblogs.com/itzgr/archive/2018/12/27/10182944.html
-Advertisement-
Play Games

一 Docker volume形態 因為Docker 採用 AFUS 分層文件系統時,文件系統的改動都是發生在最上面的容器層,在容器的生命周期內,它是持續的,包括容器在被停止後。但是,當容器被刪除後,該數據層也隨之被刪除了。因此,Docker 採用 volume (捲)的形式來向容器提供持久化存儲。 ...


一 Docker volume形態

因為Docker 採用 AFUS 分層文件系統時,文件系統的改動都是發生在最上面的容器層,在容器的生命周期內,它是持續的,包括容器在被停止後。但是,當容器被刪除後,該數據層也隨之被刪除了。因此,Docker 採用 volume (捲)的形式來向容器提供持久化存儲。Docker volume 有如下幾種形態。
  • 預設,即無Docker volume
  • Data volume (數據捲)
  • data container(數據捲容器)

二 預設無volume

預設情況下,容器不使用任何 volume,此時,容器的數據被保存在容器之內,它只在容器的生命周期記憶體在,會隨著容器的被刪除而被刪除,此時若需要永久保存可使用 docker commit 命令將它持久化為一個新的鏡像。

三 Data volume (數據捲)

一個 data volume 是容器中繞過 Union 文件系統的一個特定的目錄。被設計用來保存數據,而不管容器的生命周期。因此,當你刪除一個容器時,Docker 不會自動地刪除一個volume。

3.1 -v掛載容器內目錄

數據捲特性:
  • 數據捲是目錄或文件,而非沒有格式化的磁碟(塊設備)
  • 數據捲可以在容器之間共用和重用
  • 對數據捲的修改會立馬生效
  • 對數據捲的更新,不會影響鏡像
  • 數據捲預設會一直存在,即使容器被刪除
root@docker:~# docker run -d -p 8080:80/tcp --name web01 -v /webroot:/usr/local/apache2/htdocs httpd #掛載固定目錄 root@docker:~# docker run -d -p 9090:80/tcp --name web02 -v /usr/local/apache2/htdocs httpd #自動映射目錄
  • -d:後臺進程;
  • -p:映射埠,物理機埠:容器埠;
  • -v:物理機文件夾:容器的目錄(容器中目錄如果不存在,會自動創建,如果存在,會覆蓋掉),即將宿主機中的目錄掛載到鏡像中的目錄。
提示:若需要掛載多個目錄,可多次採用-v。 區別:
類型 掛載固定目錄 自動映射目錄
volume 位置 可任意指定 /var/lib/docker/volumes/……
對已有mount point 影響 隱藏並替換為 volume 原有數據複製到 volume
是否支持單個文件 支持 不支持,只能是目錄
許可權控制 可設置為只讀,預設為讀寫許可權 無控制,均為讀寫許可權
移植性 移植性弱,與host path綁定 移植性強,無需指定host目錄
  1 root@docker:~# docker inspect b7 | grep -A11 "Mounts"
  2 root@docker:~# echo "Hello web01!" >/webroot/index.html
  3 root@docker:~# echo "Hello web02!" >/var/lib/docker/volumes/725d7d76ec8eb10f5730fe5663cb1d1eb7481efaa2a5a790343dca5d0557564a/_data/index.html
  39_thumb1 提示:若不指定本地目錄則會自動在宿主機/var/lib/docker/volumes下為其生成一個隨機目錄。 40_thumb1 測試:瀏覽器訪問:http://172.24.8.90:8080/ 41_thumb1 測試:瀏覽器訪問:http://172.24.8.90:9090/ 42_thumb1 提示:採用volumes數據捲的情況下,當對應的容器被刪除時,其掛載的目錄會保留。主機上的目錄可以是一個本地目錄,也可以在一個 NFS share等形式。

3.2 -v掛載文件

  1 root@docker:~# docker run --rm -it --name centos7-01 -v ~/.bashrc:/root/.bashrc centos:7
提示:本地主機文件作為數據捲掛載到容器中,不建議在容器中直接修改。

四 docker的數據共用

4.1 docker容器與宿主機共用數據

方式一:docker cp cp的用法如下:
  1 docker cp [OPTIONS] CONTAINER:PATH LOCALPATH|-
  2 docker cp [OPTIONS] LOCALPATH|- CONTAINER:PATH
  3 root@docker:~# docker cp /root/.vimrc centos7-01:/root/			#從宿主機拷貝至容器
  4 root@docker:~# docker cp centos7-01:/root/.vimrc /root/.vimrc_bak	        #從容器拷貝至宿主機
  方式二:採用數據捲掛載形式,見3。

4.2 docker容器之間共用數據

情景一:共用host宿主機目錄 將同一個host目錄掛載到不同的容器即可。
  1 root@docker:~# docker run -d -p 1010:80/tcp --name web03 -v /webroot:/usr/local/apache2/htdocs httpd
  2 root@docker:~# docker run -d -p 2020:80/tcp --name web04 -v /webroot:/usr/local/apache2/htdocs httpd
  3 root@docker:~# echo "This is share file!" >/webroot/index.html
  測試:瀏覽器分別訪問http://172.24.8.90:1010和/http://172.24.8.90:2020/。

4.2 docker容器與容器共用數據

見5.data container(數據捲容器)。

五 data container(數據捲容器)

data container中不會跑應用,而只是掛載一個捲,volume container是專門為其他容器提供volume的容器,它提供的捲的類型可以是bind mount,也可以是docker managed volume。

5.1 創建數據捲容器

data container。這種 container 中不會跑應用,而只是掛載一個捲。
  1 root@docker:~# docker create --name sharefile01 -v /data:/usr/local/apache2/htdocs centos:7
  2 root@docker:~# docker inspect sharefile01 | grep -A11 "Mounts"
  43_thumb1 解釋:創建一個名為sharefile01的用於容器之間共用數據的數據捲容器,並將宿主機的/data目錄掛載至該容器的/usr/local/apache2/htdocs目錄。 提示:其他容器只需獲取數據捲容器的掛載點,因此可該容器可不運行。/usr/local/apache2/htdocs為容器中的目錄,並非宿主機本地目錄,當其他容器引用此容器時,會自動在容器中掛載此目錄。

5.2 引用數據捲容器

新建容器時可通過--volumes-from參數指定需要引用的數據捲容器。
  1 root@docker:~# docker run -d -p 3030:80/tcp --name web05 --volumes-from sharefile01 httpd
  2 root@docker:~# docker run -d -p 4040:80/tcp --name web06 --volumes-from sharefile01 httpd
  3 root@docker:~# echo "This is share file two!" >/data/index.html
  測試:瀏覽器分別訪問http://172.24.8.90:3030和/http://172.24.8.90:4040/。

六 volume管理

6.1 創建volume捲

  1 root@docker:~# docker volume create --name data02
  2 root@docker:~# docker volume inspect data02
  44_thumb1

6.2 使用volume捲

  1 root@docker:~# docker run -d -p 5050:80/tcp --name web07 -v data02:/usr/local/apache2/htdocs httpd
  2 root@docker:~# echo "Hello web07!" > /var/lib/docker/volumes/data02/_data/index.html
  測試:瀏覽器訪問http://172.24.8.90:5050。

6.3 查看volume捲

  1 root@docker:~# docker volume ls				#查看所有volume捲
  2 root@docker:~# docker volume ls -qf dangling=true	        #查看所有孤兒捲
  提示:使用 docker run -v 啟動的容器被刪除以後,在主機上所掛載的捲不會刪除,即殘留孤兒捲。

6.4 刪除volume捲

  1 root@docker:~# docker volume rm 95704ae78c05261a46d2dc1f2bf872a8c3dc634817e7c0db53e7e6d40f2dc8ea
  2 root@docker:~# docker volume rm $(docker volume ls -qf dangling=true)	#刪除孤兒捲
 

6.5 刪除容器時刪除 volume

  1 root@docker:~# docker run -d -p 6060:80/tcp --name web08 -v /usr/local/apache2/htdocs httpd
  2 root@docker:~# docker inspect web08
  45_thumb1
  1 root@docker:~# docker rm -vf web08
  2 root@docker:~# docker volume ls
  提示:若容器採用靜態固定掛載,則使用-vf也無法刪除volume捲。

七 volume數據備份及還原

7.1 備份

原理:將需要備份的容器,如web09,當做數據捲容器,以此容器創建一個mydatabackup臨時容器,並將宿主機/mybackup掛載到mydatabackup容器的/databack,併在該臨時容器中執行備份的打包命令,備份需要保存數據的目錄,如/usr/local/apache2到/databack,也就是備份到宿主機/mybackup目錄。
  1 root@docker:~# docker run -d -p 1111:80/tcp --name web09 -v /usr/local/apache2/htdocs  httpd
  2 root@docker:~# docker inspect web09 | grep -A11 "Mounts"
  3 root@docker:~# echo "This is web09 backup test!">/var/lib/docker/volumes/16aa6956e7076ecb9f256c302833640880e3bb1b8602771cca378e7230975488/_data/index.html
  46_thumb1 提示:創建用於備份的容器,並備份該文件。
  1 root@docker:~# docker run --volumes-from web09 --name mydatabackup -v /mybackup:/databack httpd tar zcf /databack/http-backup.tar.gz /usr/local/apache2/htdocs
47_thumb1

7.2 還原

原理:新建一個臨容器,如temp01,然後將容器需要保存的數據的目錄,如/usr/local/apache2掛載至宿主機,然後再並將宿主機/mybackup掛載到該容器的/databack,將temp01臨時容器當做數據捲容器新建web10容器,並將備份文件解壓恢復,則恢復至temp01容器所掛載的宿主機目錄,再以temp01為數據捲容器創建新的容器即可。
  1 root@docker:~# docker run -d -v /usr/local/apache2/htdocs --name temp01 httpd
  2 root@docker:~# docker run --volumes-from temp01 --name web10 -v /mybackup:/databack httpd tar zxf /databack/http-backup.tar.gz
  3 #此步驟執行完畢即將備份文件已經還原至容器的/usr/local/apache2/htdocs。
  4 root@docker:~# docker run -d -p 2222:80/tcp --name web11 --volumes-from temp01 httpd
  測試:瀏覽器訪問http://172.24.8.90:2222。 48_thumb1   參考鏈接:https://www.cnblogs.com/sammyliu/p/5932996.html https://www.cnblogs.com/shoufengwei/p/7259496.html
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 開啟非同步監聽,不會導致主線程的堵塞,在服務異常斷開後一直檢測重新連接服務,成功連接服務後通知各個註冊的客戶端! #region 檢測斷線並重連OPC服務 可以強制啟動OPC服務程式 /// <summary> /// 提供外部使用 /// 重新連接事件 /// </summary> public e ...
  • 第一次整理了下關於autofac的一些具體的用法 1. 安裝 Autofac: Install-Package Autofac -Version 4.8.1 2. 創建兩個類庫項目,IService (用於編寫介面),ServiceImpl(用於創建實現類) IService 下 public in ...
  • 一、前言 在上一篇的文章中,主要是搭建了我們的開發環境,同時創建了我們的項目模板框架。在整個前後端分離的項目中,後端的 API 介面至關重要,它是前端與後端之間進行溝通的媒介,如何構建一個 “好用” 的 API 介面,是需要我們後端人員好好思考的。 在系統迭代的整個過程中,不可避免的會添加新的資源, ...
  • ...
  • 一、什麼是c#中的異常? 異常是程式運行中發生的錯誤,異常處理是程式的一部分。c#中的異常類主要是直接或者間接的派生於 System.Exception類 ,也就是說System.Exception類是所有預定義的系統異常的基類。錯誤的出現並不總是編寫應用的程式員的原因,有的時候應用程式也會因為終端 ...
  • 這裡只有操作步驟! 第一、查看IIS是否安裝了 AspNetCoreModule,查看路徑:IIS-》模塊 查看 安裝步驟 下載網址:https://www.microsoft.com/net/download/windows 下載完以後點擊安裝,安裝完成以後重啟電腦 第二、.net Core Mv ...
  • 在上一篇博文《 "[UWP]如何實現UWP平臺最佳圖片裁剪控制項" 》中我講解了編寫ImageCropper控制項的過程及知識分享。在那篇文章里,我大言不慚的稱其為UWP平臺最佳圖片裁剪控制項(主要是沒有別的類似控制項來充當對手
  • 感謝Jeffcky大佬的博客: EntityFramework Core 2.0全局過濾 (HasQueryFilter) https://www.cnblogs.com/CreateMyself/p/8491058.html 什麼是值對象 沒有唯一的標識,固定不變的,表示一個具體的概念,用來描述一 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...