Debian系統上Docker備份與恢復指南
在Debian系統上,Docker的備份與恢復需覆蓋鏡像、容器、卷、網絡四大核心組件,以下是具體操作步驟及注意事項:
鏡像是容器的基礎,備份鏡像可保留應用及其依賴的原始狀態。
使用docker save
命令將鏡像保存為.tar
文件:
docker save -o <鏡像文件名.tar> <鏡像名>:<標簽>
# 示例:備份名為"myapp"、標簽為"latest"的鏡像
docker save -o myapp.tar myapp:latest
容器是鏡像的運行實例,備份容器需保存其當前文件系統狀態(包括未提交的更改)。
docker commit
命令將運行中的容器保存為新的鏡像(需指定容器ID或名稱):docker commit <容器ID或名稱> <備份鏡像名>:<標簽>
# 示例:備份容器"mycontainer"(ID可通過`docker ps`查看)
docker commit mycontainer mycontainer_backup:latest
docker save
命令將新鏡像導出,便于后續恢復:docker save -o <備份文件名.tar> <備份鏡像名>:<標簽>
# 示例:導出"mycontainer_backup"鏡像
docker save -o mycontainer_backup.tar mycontainer_backup:latest
卷是Docker中用于數據持久化的關鍵組件(如數據庫文件、應用配置),備份卷可防止數據丟失。
docker volume ls
命令查看系統中的卷:docker volume ls
docker cp
命令將卷內的數據復制到主機的指定目錄(需提前創建備份目錄):docker cp <卷名>:/ <主機備份路徑>
# 示例:備份名為"mydata"的卷到主機的/mnt/backup目錄
docker cp mydata:/ /mnt/backup/mydata
Docker網絡(如橋接網絡、自定義網絡)的配置信息默認存儲在主機文件系統中,備份網絡配置可保留網絡拓撲。
tar
命令打包/etc/docker/network
目錄(包含網絡配置文件):tar -czvf docker-networks.tar.gz /etc/docker/network
若需備份Docker的所有數據(包括鏡像、容器、卷的底層數據),可直接備份/var/lib/docker
目錄(Docker默認數據存儲路徑):
sudo tar -czvf /backup/docker-data-$(date +%Y%m%d).tar.gz /var/lib/docker
使用docker load
命令將備份的.tar
文件加載為鏡像:
docker load -i <鏡像文件名.tar>
# 示例:恢復"myapp.tar"鏡像
docker load -i myapp.tar
docker save
備份鏡像,可直接加載鏡像并啟動容器:docker load -i <備份文件名.tar> # 先加載鏡像
docker run -d --name <新容器名> <備份鏡像名>:<標簽>
# 示例:從"mycontainer_backup.tar"恢復容器
docker load -i mycontainer_backup.tar
docker run -d --name mycontainer_restored mycontainer_backup:latest
docker export
備份了容器文件系統,可通過docker import
創建鏡像并啟動容器:cat <備份文件名.tar> | docker import - <新鏡像名>:<標簽> # 導入為鏡像
docker run -d --name <新容器名> <新鏡像名>:<標簽>
# 示例:從"mycontainer.tar"恢復容器
cat mycontainer.tar | docker import - mycontainer_new:latest
docker run -d --name mycontainer_restored mycontainer_new:latest
將備份的卷數據復制回對應的卷目錄(需確保卷已存在):
docker cp <主機備份路徑> <卷名>:/<卷內路徑>
# 示例:將/mnt/backup/mydata的數據恢復到"mydata"卷
docker cp /mnt/backup/mydata mydata:/data
將備份的網絡配置文件復制回/etc/docker/network
目錄,并重啟Docker服務使配置生效:
tar -xzvf docker-networks.tar.gz -C / # 解壓到根目錄
sudo systemctl restart docker # 重啟Docker服務
若備份了/var/lib/docker
目錄,可將備份文件解壓到原路徑(需停止Docker服務以避免數據沖突):
sudo systemctl stop docker # 停止Docker服務
sudo tar -xzvf /backup/docker-data-$(date +%Y%m%d).tar.gz -C / # 解壓到根目錄
sudo systemctl start docker # 啟動Docker服務
docker stop <容器名>
/docker rm <容器名>
)。