Docker在Debian上的备份与恢复方法
使用docker save命令将镜像保存为可传输的.tar文件,适用于镜像的跨系统迁移或长期存储。
操作步骤:
docker save -o <镜像文件名.tar> <镜像名>:<标签>
# 示例:备份名为"myapp"、标签为"latest"的镜像
docker save -o myapp.tar myapp:latest
容器是镜像的运行实例,备份容器需先将其保存为镜像,再导出为.tar文件。
操作步骤:
docker commit <容器ID或名称> <备份镜像名>:<标签>
# 示例:提交名为"mycontainer"的容器为"mycontainer_backup:latest"
docker commit mycontainer mycontainer_backup:latest
docker save -o <备份文件名.tar> <备份镜像名>:<标签>
# 示例:保存"mycontainer_backup:latest"为"mycontainer_backup.tar"
docker save -o mycontainer_backup.tar mycontainer_backup:latest
卷用于持久化容器数据(如数据库文件、日志),需直接备份卷内的数据目录。
操作步骤:
docker volume ls
docker cp <卷名>:/<卷内路径> <主机备份目录>
# 示例:备份名为"mydata"的卷到主机的"/mnt/backup/mydata"
docker cp mydata:/ /mnt/backup/mydata
Docker网络(如bridge、overlay)无直接备份命令,需备份其配置文件以实现网络恢复。
操作步骤:
tar -czvf docker-networks.tar.gz /etc/docker/network
# 示例:将网络配置打包为"docker-networks.tar.gz"
若需备份整个Docker环境(包括镜像、容器、卷、配置),可直接备份Docker的数据目录和配置文件。
操作步骤:
sudo systemctl stop docker
/var/lib/docker):sudo tar -czvf /backup/docker-data-$(date +%Y%m%d).tar.gz /var/lib/docker
/etc/docker):sudo tar -czvf /backup/docker-config-$(date +%Y%m%d).tar.gz /etc/docker
sudo systemctl start docker
使用docker load命令将.tar文件加载为本地镜像。
操作步骤:
docker load -i <镜像文件名.tar>
# 示例:恢复"myapp.tar"中的镜像
docker load -i myapp.tar
从备份的镜像创建新容器,需指定容器名称和端口映射(可选)。
操作步骤:
docker run -d --name <新容器名> [-p 主机端口:容器端口] <镜像名>:<标签>
# 示例:从"mycontainer_backup:latest"创建名为"mycontainer_restored"的容器
docker run -d --name mycontainer_restored mycontainer_backup:latest
将主机备份的卷数据复制回对应的Docker卷目录。
操作步骤:
docker cp <主机备份目录> <卷名>:/<卷内路径>
# 示例:将主机"/mnt/backup/mydata"复制到卷"mydata"的根目录
docker cp /mnt/backup/mydata mydata:/
将备份的网络配置文件复制回/etc/docker/network目录,并重启Docker服务。
操作步骤:
tar -xzvf docker-networks.tar.gz -C / # 解压到根目录
sudo systemctl restart docker # 重启Docker使配置生效
若需恢复整个Docker环境,需先停止服务,再覆盖数据目录和配置文件,最后重启服务。
操作步骤:
sudo systemctl stop docker
sudo tar -xzvf /backup/docker-data-$(date +%Y%m%d).tar.gz -C /
sudo tar -xzvf /backup/docker-config-$(date +%Y%m%d).tar.gz -C /
sudo systemctl start docker
-v /主机目录:/容器目录),而非容器内部,避免容器删除导致数据丢失。