docker數據卷

docker專題(五)-- docker數據卷

故事凌 故事凌 3月1日

手機閱讀

9.1 容器中管理數據的主要兩種方式

  • 數據卷(Data Volumes): 容器內數據直接映射到本地主機環境;如何在容器內創建數據卷,並且把本地的目錄或文件掛載到容器內的數據卷中。
  • 數據卷容器(Data Volume Containers):使用特定容器維護數據卷。如何使用數據卷容器在容器和主機、容器和容器之間共享數據,並實現數據的備份和恢復。

9.1.1 數據卷

數據卷是一個可供容器使用的特殊目錄,它將主機操作系統目錄

直接映射進容器,類似於Linux中的mount操作。

  • 數據卷可以提供很多有用的特性,如下所示:
  • 數據卷可以在容器之間共享和重用,容器間傳遞數據將變得高效方便;
  • 對數據卷內數據的修改會立馬生效,無論是容器內操作還是本地操作;
  • 對數據卷的更新不會影響鏡像,解耦了應用和數據;
  • 卷會一直存在,直到沒有容器使用,可以安全地卸載它
  • Demo示例:

在主機和容器之間創建數據卷,實現數據共享(共享目錄)

<code>docker run -it -v /root/mydatavolume:/root/container/mydatavolume centos /bin/bash/<code>

-v 指定數據卷的目錄

默認:掛載的數據卷默認權限是讀寫(RW),也可以通過指定ro參數標識為只讀

<code>docker run -it -v /root/mydatavolume:/root/container/mydatavolume:ro centos /bin/bash/<code>

9.1.2 數據卷容器

如果用戶需要在多個容器之間共享一些持續更新的數據,最簡單 的方式是使用數據卷容器。數據卷容器也是一個容器,但是它的 目的是專門用來提供數據卷供其他容器掛載。

  1. 創建一個數據卷容器dbdatacontainer,在這個容器中創建一個數據卷掛載: /dbdata
<code>docker run -it -v /dbdata --name dbdatacontainer centos/<code>
  1. 可以在其他的容器中使用 --volumes-from來掛載dbdatacontainer容器中的數據卷
<code>docker run -it --volumes-from dbdatacontainer --name db1 centos
docker run -it --volumes-from dbdatacontainer --name db2 centos/<code>

9.2 Docker數據卷類型

1.基於主機文件系統的數據卷由Docker主機進行管理,在文件系統中(/var/lib/docker/volumes)創建出來的文件夾用於存放數據卷,建議採用此方法進行持久化數據。非Docker進程不應修改文件系統這個文件夾。

2.基於綁定掛載的數據卷可以存儲在網絡存儲等任何位置,Docker主機或Docker容器上的非Docker進程可以隨時修改其中的內容。

3.基於主機內存的數據卷僅存儲在主機系統的內存中,永遠不會寫入主機系統的文件系統。它可以在容器的生命週期中由容器使用,一般用於存儲非持久狀態或敏感信息。

9.3 基於主機文件系統的數據卷

9.3.1 創建數據卷

<code>docker volume create <volume>/<code>

9.3.2 查看數據卷

<code>docker volume ls/<code>
docker數據卷

9.3.3 掛載數據卷

<code>docker run -v <volume>:<containerfilesystempath>:<mode> <image>/<mode>/<containerfilesystempath>/<volume>/<code>
docker數據卷

9.3.4 刪除數據卷

<code>docker volume rm <volume>/<code>

9.3.5 查看數據卷詳情

<code>docker volume inspect <volume>/<code>

9.4 基於綁定掛載的數據卷

9.4.1 創建綁定掛載至本地文件系統 --mount模式

<code>docker run -it --mount type=bind,source=, target= <image>
# 查看一下掛載的情況
docker inspect <container>/<image>
/<code>
docker數據卷

docker數據卷

docker數據卷

9.4.2 創建綁定掛載至本地文件模式 -v模式

<code>docker run -v <hostfilesystempath>:<containnerfilesystempath>:<mode> <image>/<mode>/<containnerfilesystempath>/<hostfilesystempath>/<code>

這個直接把主機的文件掛載docker容器中, -v 掛載本地文件系統路徑如果不存在該路徑則會進行創建,但如果使用 --mount 掛載本地文件系統路徑時如果路徑不存在則會產生報錯。但兩者所執行後的效果是一樣的。

9.5 基於主機內容的掛載

9.5.1 內存掛載卷 --mount模式

創建容器並使用內存掛載卷 --mount模式

<code>docker run -it --mount type=tmpfs,dst=<path> <image>/<path>/<code>

9.5.2 內存掛載卷 --tmpfs模式

創建容器並使用內存掛載卷 --tmpfs模式

<code>docker run -it --tmpfs <path> <image>/<path>/<code>

9.6 利用數據卷容器來遷移

9.6.1備份

首先利用centos鏡像創建了一個容器worker。

使用--volumes-from dbdata 參數來讓worker容器掛載dbdata容器的數據卷(即dbdata數據卷),

使用-v $(pwd):/backup參數來掛載本地的當前目錄到worker容器的/backup目錄。

worker容器啟動後,使用了tar cvf /backup/backup.tar /dbdata命令來將 /dbdata下內容備份為容器內的/backup/backup.tar,即宿主主機當前目錄 下的backup.tar。

<code>docker run --volumes-from dbdatacontainer -v $(pwd):/backup --name myworker centos tar cvf /backup/backup.tar /dbdata/<code>

9.6.2 恢復

如果要將數據恢復到一個容器,可以按照下面的步驟操作。

  1. 首先創建一個帶有數據卷的容器dbdata2:
<code>docker run -it -v /dbdata --name dbdatacontainer2 centos/<code>
  1. 然後創建另一個新的容器,掛載dbdata2的容器,並使用untar解壓備份文 件到所掛載的容器卷中:
<code>docker run -it --volumes-from dbdatacontainer2 -v $(pwd):/backup --name worker2 centos /bin/bash
cd /dbdata
tar xvf /backup/backup.tar/<code>


簡介:生活中的段子手,目前就職於一家地產公司做 Devops 相關工作,曾在大型互聯網公司做高級運維工程師,熟悉 Linux 運維,Python 運維開發,Java 開發,Devops 常用開發組件等,個人公眾號:stromling,歡迎來撩我哦!


分享到:


相關文章: