Docker 從門到精通(四)一 資料卷的使用

大雄45發表於2023-05-04
一,資料卷的使用

有時候需要使用資料庫,但是又希望它的資料能儲存在本地,Docker中提供了資料卷可以供你方便的運算元據。資料卷是一個可供一個或多個容器使用的特殊目錄,它繞過 UFS,可以提供很多有用的特性:

資料卷可以在容器之間共享和重用

對資料卷的修改會立馬生效

對資料卷的更新,不會影響映象

資料卷預設會一直存在,即使容器被刪除

*注意:資料卷的使用,類似於 Linux 下對目錄或檔案進行 mount,映象中的被指定為掛載點的目錄中的檔案會隱藏掉,能顯示看的是掛載的資料卷。

Docker 從門到精通(四)一 資料卷的使用Docker 從門到精通(四)一 資料卷的使用

新增一個資料卷:
# docker run -d -it --name busybox -v /data/ busybox

這會在容器內建立一個 /data 目錄,並載入一個資料捲到容器的 /data 目錄。

進入容器:
# docker exec -it busybox sh

檢視目錄對映:

# docker inspect -f {{.Volumes}} busybox  
map[/data:/var/lib/docker/volumes/b98191464fb0b1a888507b1e5b324802012297342adfe5d6125bcbfd08b621a9/_data]
可以看到將容器中的 /data 目錄對映到了 /var/lib/docker/volumes/b98191464fb0b1a888507b1e5b324802012297342adfe5d6125bcbfd08b621a9/_data 這個目錄下,所以資料在容器中的 /data 目錄和此目錄下是同步的。
[root@sta2 data]# cd  /var/lib/docker/volumes/b98191464fb0b1a888507b1e5b324802012297342adfe5d6125bcbfd08b621a9/_data
[root@sta2 _data]# touch b

在容器中 /data 目錄下檢視:

/data # ls
a  b
b 檔案依然存在。

資料卷是被設計用來持久化資料的,它的生命週期獨立於容器,Docker不會在容器被刪除後自動刪除資料卷,並且也不存在垃圾回收這樣的機制來處理沒有任何容器引用的資料卷。如果需要在刪除容器的同時移除資料卷。可以在刪除容器的時候使用 docker rm -v 這個 。

[root@sta2 docker]# docker stop eec30d8d6fce
[root@sta2 docker]# docker rm -v eec30d8d6fce

使用 -v 標記也可以指定掛載一個本地主機的目錄到容器中去,-v 標記也可以從主機掛載單個檔案到容器中

[root@sta2 docker]# docker run -it --name mybusybox -v /data:/data busybox sh

這種方法相當於在本機中指定了要對映的目錄,將本地的資料卷 /data 目錄載入到容器中的 /data 目錄。

/ # cd  /data/
/data # ls
a
/data # touch c

然後在本機的 /data 目錄檢視 c 檔案是否存在:

[root@sta2 data]# ls  
a  c

Docker 掛載資料卷的預設許可權是讀寫,使用者也可以透過 :ro 指定為只讀。

# docker run -it --name mybusybox -v /data:/data:ro busybox sh
二,資料卷容器

如果你有一些持續更新的資料需要在容器之間共享,最好建立資料卷容器。

[root@sta2 data]# docker run -d -v /data/ --name  dbdata busybox  #首先,建立一個名為 dbdata 的資料卷容器

然後,在其他容器中使用 –volumes-from 來掛載 dbdata 容器中的資料卷。

# docker run -d --volumes-from dbdata --name db1 nginx
 
# docker run -d --volumes-from dbdata --name db2 nginx

也可以使用 –volumes-from 來掛載來自多個容器的多個資料卷:

# docker run -d --name db3 --volumes-from db1  --volumes-from db nginx

提示:使用 –volumes-from 引數所掛載資料卷的容器自己並不需要保持在執行狀態。

備份資料卷

首先使用 –volumes-from 標記來建立一個載入 dbdata 容器卷的容器,並從主機掛載當前目錄到容器的 /backup 目錄。命令如下:

# docker run --volumes-from dbdata -v /data:/backup busybox tar cvf /backup/backup.tar.gz /data/
恢復

如果要恢復資料到一個容器,首先建立一個帶有空資料卷的容器 dbdata2。

# docker run -v /dbdata --name dbdata2 ubuntu /bin/bash

然後建立另一個容器,掛載 dbdata2 容器卷中的資料卷,並使用 untar 解壓備份檔案到掛載的容器卷中。

# docker run --volumes-from dbdata2 -v /data:/backup busybox tar xvf /backup/backup.tar.gz

為了檢視/驗證恢復的資料,可以再啟動一個容器掛載同樣的容器捲來檢視

# docker run --volumes-from dbdata2 busybox /bin/ls /dbdata
刪除資料

如果刪除了掛載的容器(db1 和 db2),資料卷並不會被自動刪除。如果要刪除一個資料卷,必須在刪除最後一個還掛載著它的容器時使用 docker rm -v 命令來指定同時刪除關聯的容器。


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

相關文章