Backup
Docker 卷備份和恢復
我正在使用 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