温馨提示×

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,仅在特定场景测试验证后使用。

0