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 <容器名>)。