Backup

Docker 卷備份和恢復

  • April 29, 2016

我正在使用 Docker 在 CentOS 6.4 伺服器上部署一些服務,並且試圖弄清楚如何正確備份它們生成的數據。

例如,其中一項服務是使用者可以上傳文件的 Web 應用程序。對於這個容器,我有一個/files要備份的捲。主機掛載看起來有些不受歡迎,因為這樣的掛載絕不是可移植的——正如這篇博文和卷的 docker 文件中所說。

我從同一篇博文中知道,我不需要主機掛載來訪問卷中的文件,我可以使用它docker inspect來找出文件的位置。

但這是我的問題:我正在考慮僅備份建構容器所需的 dockerfile 以及與它們關聯的捲。如果我必須從備份中恢復所有內容,我將如何知道哪個卷目錄對應於哪個容器?重建容器會導致 id 和卷路徑發生變化,所以我需要一些額外的資訊來匹配它們。如果有的話,我還應該備份什麼才能真正恢復所有內容?

你是對的。由於您可以擁有多個具有自己卷的容器,因此您需要跟踪哪個卷對應於哪個容器。如何做到這一點取決於您的設置:我使用名稱 -data 作為數據容器,因此圖像屬於哪個容器是顯而易見的。這樣就可以像這樣備份:

VOLUME=`docker inspect $NAME-data | jq '.[0].Volumes["/path/in/container"]'`
tar -C $VOLUME . -czvf $NAME.tar.gz

現在你只需要重建你的鏡像並重新創建你的數據容器:

cat $NAME.tar.gz | docker run -name $NAME-data -v /path/in/container \
                             -i busybox tar -C /path/int/container -xzf -

所以這意味著你需要備份:

  • Dockerfile
  • 體積
  • 容器中的捲路徑
  • 卷所屬容器的名稱

**更新:**與此同時,我創建了一個工具來備份容器及其卷(容器):https ://github.com/discordianfish/docker-backup和一個可以創建備份並將它們推送到的備份映像s3:https ://github.com/discordianfish/docker-lloyd

引用自:https://serverfault.com/questions/576490