Data Volume 中存放的是重要的應用數據,如何管理 volume 對應用至關重要。前面我們主要關注的是 volume 的創(chuàng)建、共享和使用,本節(jié)將討論如何備份、恢復、遷移和銷毀 volume。

備份

因為 volume 實際上是 host 文件系統(tǒng)中的目錄和文件,所以 volume 的備份實際上是對文件系統(tǒng)的備份。

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

萬碼學堂,電腦培訓,計算機培訓,Java培訓,JavaEE開發(fā)培訓,青島軟件培訓,軟件工程師培訓

所有的本地鏡像都存在 host 的 /myregistry 目錄中,我們要做的就是定期備份這個目錄。

恢復

volume 的恢復也很簡單,如果數據損壞了,直接用之前備份的數據拷貝到 /myregistry 就可以了。

遷移

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

  1. docker stop 當前 Registry 容器。

  2. 啟動新版本容器并 mount 原有 volume。


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

當然,在啟用新容器前要確保新版本的默認數據路徑是否發(fā)生變化。

銷毀

可以刪除不再需要的 volume,但一定要確保知道自己正在做什么,volume 刪除后數據是找不回來的。

docker 不會銷毀 bind mount,刪除數據的工作只能由 host 負責。對于 docker managed volume,在執(zhí)行 docker rm 刪除容器時可以帶上 -v 參數,docker 會將容器使用到的 volume 一并刪除,但前提是沒有其他容器 mount 該 volume,目的是保護數據,非常合理。

如果刪除容器時沒有帶 -v 呢?這樣就會產生孤兒 volume,好在 docker 提供了 volume 子命令可以對 docker managed volume 進行維護。請看下面的例子:

萬碼學堂,電腦培訓,計算機培訓,Java培訓,JavaEE開發(fā)培訓,青島軟件培訓,軟件工程師培訓

容器 bbox 使用的 docker managed volume 可以通過 docker volume ls 查看到。

刪除 bbox:

萬碼學堂,電腦培訓,計算機培訓,Java培訓,JavaEE開發(fā)培訓,青島軟件培訓,軟件工程師培訓

因為沒有使用 -v,volume 遺留了下來。對于這樣的孤兒 volume,可以用 docker volume rm 刪除:

萬碼學堂,電腦培訓,計算機培訓,Java培訓,JavaEE開發(fā)培訓,青島軟件培訓,軟件工程師培訓

如果想批量刪除孤兒 volume,可以執(zhí)行:


docker volume rm $(docker volume ls -q)

小結

本章我們學習了以下內容:

  1. docker 為容器提供了兩種存儲資源:數據層和 Data Volume。

  2. 數據層包括鏡像層和容器層,由 storage driver 管理。

  3. Data Volume 有兩種類型:bind mount 和 docker managed volume。

  4. bind mount 可實現容器與 host 之間,容器與容器之間共享數據。

  5. volume container 是一種具有更好移植性的容器間數據共享方案,特別是 data-packed volume container。

  6. 最后我們學習了如何備份、恢復、遷移和銷毀 Data Volume。

不知大家發(fā)現沒有,這章我們學習的只是單個 docker host 中的存儲方案。而跨主機存儲也是一個重要的主題,當然也更復雜,我們會在容器進階技術章節(jié)詳細討論。

下一節(jié)我們便開始進階知識部分的學習,首先討論如何高效管理多個 Docker 主機。

http://www.cnblogs.com/CloudMan6/p/7214828.html