Docker之 數據持久化


容器中數據持久化主要有兩種方式:

  1. 數據卷(Data Volumes)
  2. 數據卷容器(Data Volumes Dontainers)

數據卷

數據卷是一個可供一個或多個容器使用的特殊目錄,可以繞過UFS(Unix File System)。

  1. 數據卷可以在容器之間共享和重用
  2. 對數據卷的修改會立馬生效
  3. 對數據卷的更新,不會影響鏡像
  4. 數據卷默認會一直存在,即使容器被刪除
  5. 一個容器可以掛載多個數據卷

注意:數據卷的使用,類似於 Linux 下對目錄或文件進行 mount。

創建數據卷

示例:

?
1
docker run --name nginx-data - v /mydir nginx

執行如下命令即可查看容器構造的詳情:

?
1
docker inspect 容器ID

由測試可知:

  1. Docker會自動生成一個目錄作為掛載的目錄。
  2. 即使容器被刪除,宿主機中的目錄也不會被刪除。

刪除數據卷

數據卷是被設計來持久化數據的,因此,刪除容器並不會刪除數據卷。如果想要在刪除容器時同時刪除數據卷,可使用如下命令:

?
1
docker rm - v 容器ID

這樣既可在刪除容器的同時也將數據卷刪除。

掛載宿主機目錄作為數據卷

?
1
docker run --name nginx-data2 - v /host-dir : /container-dir nginx

這樣既可將宿主機的/host-dir路徑加載到容器的/container-dir中。

需要注意的是:

宿主機路徑盡量設置絕對路徑——如果使用相對路徑會怎樣?

  1. 測試給答案

如果宿主機路徑不存在,Docker會自動創建

TIPS

Dockerfile暫時不支持這種形式。

掛載宿主機文件作為數據卷

?
1
docker run --name nginx-data3 - v /文件路徑: /container 路徑 nginx

指定權限

默認情況下,掛載的權限是讀寫權限。也可使用:ro 參數指定只讀權限。

示例:

?
1
docker run --name nginx-data4 - v /host-dir : /container-dir :ro nginx

這樣,在容器中就只能讀取/container-dir中的文件,而不能修改了。

數據卷容器

如果有數據需要在多個容器之間共享,此時可考慮使用數據卷容器。

創建數據卷容器:

?
1
docker run --name nginx-volume - v /data nginx

在其他容器中使用-volumes-from 來掛載nginx-volume容器中的數據卷。

?
1
2
docker run --name v1 --volumes-from nginx-volume nginx
docker run --name v2 --volumes-from nginx-volume nginx

這樣:

v1、v2兩個容器即可共享nginx-volume這個容器中的文件。

即使nginx-volume停止,也不會有任何影響。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM