Debian Docker如何备份与恢复
小樊
36
2025-12-22 20:49:46
Debian 上 Docker 的备份与恢复
一 核心原则与准备
- 明确备份对象:持久化数据主要在Docker 卷 Volumes与绑定挂载 Bind mounts中;镜像与容器可写层多为临时状态,优先备份数据与配置。
- 准备备份目录与保留策略:例如在宿主机创建**/backup**,并按日/周保留,异地或云存储同步。
- 选择一致性策略:数据库等有状态服务建议停写或锁定后备份;无法停机时采用卷快照或文件系统快照,并在恢复后校验数据一致性。
- 做好元数据备份:镜像、Compose 配置、Docker 守护进程配置等与应用同等重要。
- 定期演练恢复流程:定期还原到测试环境,验证可用性与完整性。
二 常用备份与恢复方法
- 镜像与容器快照
- 提交容器为镜像并导出:
docker commit <容器名或ID> backup_image:tag
docker save -o /backup/backup_image_tag.tar backup_image:tag
- 导入镜像:
docker load -i /backup/backup_image_tag.tar
- 仅导出容器文件系统(不含镜像历史):
docker export -o /backup/container_fs.tar <容器名或ID>
docker import - restored_image:tag < /backup/container_fs.tar
- 数据卷备份与恢复(推荐方式)
- 备份卷(使用临时 busybox 容器打包卷内容):
docker run --rm -v myvolume:/volume -v /backup:/backup busybox tar cvf /backup/volume_$(date +%F).tar /volume
- 恢复卷:
docker run --rm -v myvolume:/volume -v /backup:/backup busybox tar xvf /backup/volume_YYYY-MM-DD.tar -C /
- 绑定挂载目录备份与恢复
- 备份:tar czvf /backup/bind_data.tar.gz /host/path
- 恢复:tar xzvf /backup/bind_data.tar.gz -C /host/path
- 应用配置与元数据
- 备份:docker-compose.yml、环境变量文件、镜像标签清单、/etc/docker/daemon.json 等。
- 恢复:按原样放置配置,使用 docker-compose up -d 或 docker run 重建服务。
三 生产可用的自动化与一致性方案
- 卷备份脚本示例(含时间戳与日志)
- 备份:
#!/usr/bin/env bash
set -e
VOL=myvolume
BKDIR=/backup/volumes/$(date +%F)
mkdir -p “$BKDIR”
TS=$(date +%F-%H%M%S)
docker run --rm -v “$VOL”:/volume -v “$BKDIR”:/backup busybox tar czvf “/backup/volume_${VOL}${TS}.tar.gz" -C /volume .
echo "Backup $VOL -> $BKDIR/volume${VOL}_${TS}.tar.gz”
- 恢复:
#!/usr/bin/env bash
set -e
VOL=myvolume
BKFILE=/backup/volumes/YYYY-MM-DD/volume_myvolume_YYYY-MM-DD-HHMMSS.tar.gz
docker run --rm -v “$VOL”:/volume -v “$(dirname $BKFILE)”:/backup busybox tar xzvf “$BKFILE” -C /volume
- 定时任务(cron)
- 每天 2 点备份:
0 2 * * * /usr/local/bin/backup_volume.sh >> /var/log/backup_volume.log 2>&1
- 数据库一致性建议
- 停机备份:docker stop <db_container> → 备份卷/目录 → docker start <db_container>
- 不停机:在备份前执行应用层FLUSH TABLES WITH READ LOCK(MySQL)或使用卷快照/文件系统快照,再备份并解锁。
- 第三方工具(集群/多节点)
- Velero:适用于 Kubernetes 集群资源与持久卷的备份/恢复;
- Rancher Backup:Rancher 提供的集群级备份方案。
四 恢复流程与验证
- 卷恢复:按“卷备份与恢复”步骤将 .tar/.tar.gz 解压至目标卷;如为数据库,启动容器后执行数据校验(如校验表数量、关键记录、应用自检)。
- 镜像恢复:docker load -i image.tar;使用 docker images 确认;按需 docker run 启动。
- 配置恢复:将 docker-compose.yml 与 /etc/docker/daemon.json 等还原至原路径,按需执行 docker-compose up -d 或 docker run。
- 验证要点:
- 检查关键数据是否完整(文件数量、数据库记录、应用登录与业务功能);
- 核对镜像与卷的标签/名称与备份清单一致;
- 记录恢复日志,保留校验值(如 sha256sum)以便追溯。
五 注意事项与进阶
- 不要直接备份 /var/lib/docker(运行时元数据复杂、易变),优先备份卷数据与配置。
- 使用卷而非容器可写层承载关键数据,便于独立备份与迁移。
- 备份文件加密与异地/云存储多副本,避免单点故障。
- 谨慎使用“检查点 Checkpoint/热迁移”:该功能在 Docker 中曾为实验性,官方不建议用于生产环境,且依赖 CRIU,仅在特定场景测试验证后使用。