容器(六)volume 生命週期管理【39】

(七)volume 生命週期管理

​ Data Volume 中存放的是重要的應用數據,如何管理 volume 對應用相當重要。前面咱們主要關注的是 volume 的建立、共享和使用,本節將討論如何備份、恢復、遷移和銷燬 volume。docker

(1)備份

由於 volume 其實是 host 文件系統中的目錄和文件,因此 volume 的備份其實是對文件系統的備份。tcp

還記得前面咱們是如何搭建本地 Registry 的嗎?ui

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 目錄中,咱們要作的就是按期備份這個目錄。code

(2)恢復

volume 的恢復也很簡單,若是數據損壞了,直接用以前備份的數據拷貝到 /myregistry 就能夠了。生命週期

(3)遷移

若是咱們想使用更新版本的 Registry,這就涉及到數據遷移,方法是:dockerfile

  1. docker stop 當前 Registry 容器。it

  2. 啓動新版本容器並 mount 原有 volume。test

    docker run -d -p 5000:5000 -v /myregistry:/var/lib/registry registry:latest容器

固然,在啓用新容器前要確保新版本的默認數據路徑是否發生變化。file

(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)

相關文章
相關標籤/搜索