(七)volume 生命周期管理
? Data Volume 中存放的是重要的應用資料,如何管理 volume 對應用至關重要,前面我們主要關注的是 volume 的創建、共享和使用,本節將討論如何備份、恢復、遷移和銷毀 volume,
(1)備份
因為 volume 實際上是 host 檔案系統中的目錄和檔案,所以 volume 的備份實際上是對檔案系統的備份,
還記得前面我們是如何搭建本地 Registry 的嗎?
root@cuiyongchao:~/dockerfile/test01# docker run -d -p 5000:5000 -v /myregistry:/var/lib/registry registry:2
5fd8edac32bda897d31a831be59a0197084178b331132fd7b9b31209567fa0ce
root@cuiyongchao:~/dockerfile/test01# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5fd8edac32bd registry:2 "/entrypoint.sh /etc…" 5 seconds ago Up 3 seconds 0.0.0.0:5000->5000/tcp dreamy_leavitt
所有的本地鏡像都存在 host 的 /myregistry 目錄中,我們要做的就是定期備份這個目錄,
(2)恢復
volume 的恢復也很簡單,如果資料損壞了,直接用之前備份的資料拷貝到 /myregistry 就可以了,
(3)遷移
如果我們想使用更新版本的 Registry,這就涉及到資料遷移,方法是:
-
docker stop當前 Registry 容器, -
啟動新版本容器并 mount 原有 volume,
docker run -d -p 5000:5000 -v /myregistry:/var/lib/registry registry:latest
當然,在啟用新容器前要確保新版本的默認資料路徑是否發生變化,
(4)銷毀
可以洗掉不再需要的 volume,但一定要確保知道自己正在做什么,volume 洗掉后資料是找不回來的,
docker 不會銷毀 bind mount,洗掉資料的作業只能由 host 負責,對于 docker managed volume,在執行 docker rm 洗掉容器時可以帶上 -v 引數,docker 會將容器使用到的 volume 一并洗掉,但前提是沒有其他容器 mount 該 volume,目的是保護資料,非常合理,
如果洗掉容器時沒有帶 -v 呢?這樣就會產生孤兒 volume,好在 docker 提供了 volume 子命令可以對 docker managed volume 進行維護,請看下面的例子:
root@cuiyongchao:~# docker volume ls
DRIVER VOLUME NAME
root@cuiyongchao:~#
root@cuiyongchao:~#
root@cuiyongchao:~# docker run --name bbox01 -v /test/data busybox
root@cuiyongchao:~# docker volume ls
DRIVER VOLUME NAME
local b80242f5bf3e33f56ee0870a39a9f0846c07e172d76c28afc07e638a3fbed5f1
容器 bbox 使用的 docker managed volume 可以通過 docker volume ls 查看到,
洗掉 bbox:
root@cuiyongchao:~# docker rm bbox01
bbox01
root@cuiyongchao:~# docker volume ls
DRIVER VOLUME NAME
local b80242f5bf3e33f56ee0870a39a9f0846c07e172d76c28afc07e638a3fbed5f1
因為沒有使用 -v,volume 遺留了下來,對于這樣的孤兒 volume,可以用 docker volume rm 洗掉:
root@cuiyongchao:~# docker volume rm b80242f5bf3e33f56ee0870a39a9f0846c07e172d76c28afc07e638a3fbed5f1
b80242f5bf3e33f56ee0870a39a9f0846c07e172d76c28afc07e638a3fbed5f1
root@cuiyongchao:~# docker volume ls
DRIVER VOLUME NAME
如果想批量洗掉孤兒 volume,可以執行:
docker volume rm $(docker volume ls -q)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/228763.html
標籤:其他
