docker容器備份、恢復和遷移volume方案

volume做爲數據的載體,在不少狀況下須要對其中的數據進行備份、遷移或是恢復。下面一docker容器的volume爲例,說一下備份的技巧。

  咱們先創建一個容器vol_simple,該容器在/date掛載了一個volume。

    $ sudo docker run -it --name vol_simple -v /data ubuntu /bin/bash

    若是咱們須要將這裏的數據備份,一個很容易想到的辦法是使用docker inspect命令查找/date在宿主機上對應的文件夾位置,而後複製其中內容或是使用tar進行打包,一樣若是須要恢復某個volume中的數據,能夠查找到volume對應的文件夾,將數據複製進這個文件夾或者使用tar恢復。但這些笨拙的作法並不值得推薦,由於查找主機上文件夾後在再操做容易出錯,也不適合腳本的自動化。

  備份volume能夠使用一下方法。

    $ sudo docker run  --rm --vloumes-from vol_simple -v$(pwd):/backup ubuntu tar cvf /backup/data.tar /data 

    這個指令啓動了一個臨時的容器,這個容器掛載了兩個volume,第一個volume與要備份的volume共享,第二個volume將宿主機的當前目錄掛載到容器的/backup下。容器運行後將要備份的內容(/data文件夾)備份到/backup/data.tar,而後刪除容器,備份後的data.tar就留在了當前目錄。

  恢復volume方法:

    $ sudo docker run -it --name vol_bck -v /data ubuntu /bin/bash

    $ sudo docker run --rm --volumes-from vol_bck -v $(pwd):/backup ubuntu tar xvf /backup/data.tar -C /

   首先運行了一個新容器做爲數據恢復的目標。第二行指令啓動了一個臨時容器,這個容器掛載了兩個volume,第一個volume與要恢復的volume共享,第二個將宿主機的當前目錄掛載到容器的/backup下。因爲以前備份的data.tar在當前目錄下,那麼它在容器中的/backup也能訪問到,容器啓動後將這個存檔文件中的/data恢復到跟目錄下,而後刪除容器,恢復後的數據在vol_bck的volume中了。
相關文章
相關標籤/搜索