Data Volume 中存放的是重要的應用數據,如何管理 volume 對應用相當重要。前面咱們主要關注的是 volume 的建立、共享和使用,本節將討論如何備份、恢復、遷移和銷燬 volume。react
由於 volume 其實是 host 文件系統中的目錄和文件,因此 volume 的備份其實是對文件系統的備份。docker
還記得前面咱們是如何搭建本地 Registry 的嗎?學習
全部的本地鏡像都存在 host 的 /myregistry 目錄中,咱們要作的就是按期備份這個目錄。
spa
volume 的恢復也很簡單,若是數據損壞了,直接用以前備份的數據拷貝到 /myregistry 就能夠了。 rest
若是咱們想使用更新版本的 Registry,這就涉及到數據遷移,方法是: code
docker stop
當前 Registry 容器。 orm
啓動新版本容器並 mount 原有 volume。 ip
docker run -d -p 5000:5000 -v /myregistry:/var/lib/registry registry:latest ci
固然,在啓用新容器前要確保新版本的默認數據路徑是否發生變化。 資源
能夠刪除再也不須要的 volume,但必定要確保知道本身正在作什麼,volume 刪除後數據是找不回來的。
docker 不會銷燬 bind mount,刪除數據的工做只能由 host 負責。對於 docker managed volume,在執行 docker rm
刪除容器時能夠帶上 -v
參數,docker 會將容器使用到的 volume 一併刪除,但前提是沒有其餘容器 mount 該 volume,目的是保護數據,很是合理。
若是刪除容器時沒有帶 -v
呢?這樣就會產生孤兒 volume,好在 docker 提供了 volume 子命令能夠對 docker managed volume 進行維護。請看下面的例子:
容器 bbox 使用的 docker managed volume 能夠經過 docker volume ls
查看到。
刪除 bbox:
由於沒有使用 -v
,volume 遺留了下來。對於這樣的孤兒 volume,能夠用 docker volume rm
刪除:
若是想批量刪除孤兒 volume,能夠執行:
docker volume rm $(docker volume ls -q)
本章咱們學習瞭如下內容:
docker 爲容器提供了兩種存儲資源:數據層和 Data Volume。
數據層包括鏡像層和容器層,由 storage driver 管理。
Data Volume 有兩種類型:bind mount 和 docker managed volume。
bind mount 可實現容器與 host 之間,容器與容器之間共享數據。
volume container 是一種具備更好移植性的容器間數據共享方案,特別是 data-packed volume container。
最後咱們學習瞭如何備份、恢復、遷移和銷燬 Data Volume。
不知你們發現沒有,這章咱們學習的只是單個 docker host 中的存儲方案。而跨主機存儲也是一個重要的主題,固然也更復雜,咱們會在容器進階技術章節詳細討論。
下一節咱們便開始進階知識部分的學習,首先討論如何高效管理多個 Docker 主機。