Docker之 資料持久化

張衝andy發表於2018-12-12

容器中資料持久化主要有兩種方式:

  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停止,也不會有任何影響。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2284908/,如需轉載,請註明出處,否則將追究法律責任。

相關文章