温馨提示×

Debian上Docker容器的备份与恢复

小樊
37
2025-12-09 00:41:03
栏目: 智能运维

Debian上Docker容器的备份与恢复

一、备份策略与准备

  • 明确备份对象:持久化数据主要在Docker 卷绑定挂载中;镜像容器可写层通常可重建,但为快速恢复建议一并备份镜像与编排配置。
  • 选择一致性方式:
    • 对数据库等有事务/缓存写入的应用,优先在备份窗口内短暂停止容器或使用应用层一致性手段(如锁表/快照),再执行备份。
    • 对允许极小不一致的场景,可用临时容器对卷做在线打包,尽量缩短执行时间。
  • 准备环境与目录:
    • 安装必要工具:apt-get update && apt-get install -y docker.io rsync
    • 创建备份目录:mkdir -p /backup/docker/{images,volumes,compose,configs}
  • 保留编排与配置:备份docker-compose.yml或等效的容器运行参数,以及**/etc/docker/daemon.json**等关键配置。

二、常用备份方法

  • 镜像备份与恢复
    • 备份:docker save -o /backup/docker/images/myimage_$(date +%F).tar myimage:tag
    • 恢复:docker load -i /backup/docker/images/myimage_2025-12-09.tar
  • 容器可写层或目录数据(非卷)
    • 备份:docker cp <容器名或ID>:/var/www/html /backup/docker/containers/<容器名>_html_$(date +%F)
    • 恢复:docker cp /backup/docker/containers/<容器名>_html_2025-12-09 <容器名或ID>:/var/www/html
  • 卷数据(推荐方式:临时容器打包)
    • 备份:
      docker run --rm \
        -v my_volume:/volume:ro \
        -v /backup/docker/volumes:/backup \
        alpine tar czf /backup/my_volume_$(date +%F).tar.gz -C /volume .
      
    • 恢复:
      docker run --rm \
        -v my_volume:/volume \
        -v /backup/docker/volumes:/backup \
        alpine tar xzf /backup/my_volume_2025-12-09.tar.gz -C /volume
      
  • 卷数据(备选方式:rsync直拷宿主机卷目录)
    • 备份:rsync -a --delete /var/lib/docker/volumes/my_volume/_data/ /backup/docker/volumes/my_volume_$(date +%F)/
    • 恢复:rsync -a --delete /backup/docker/volumes/my_volume_2025-12-09/ /var/lib/docker/volumes/my_volume/_data/
  • 编排与配置备份
    • 备份:cp /path/to/docker-compose.yml /backup/docker/compose/
    • 可选:备份宿主机配置:sudo cp /etc/docker/daemon.json /backup/docker/configs/daemon.json-$(date +%F)
  • 自动化与校验(示例)
    • 卷备份脚本(含时间戳与校验):
      #!/usr/bin/env bash
      set -e
      VOLUME=my_volume
      BACKUP_DIR=/backup/docker/volumes
      TS=$(date +%Y%m%d_%H%M%S)
      FILE=$BACKUP_DIR/${VOLUME}_${TS}.tar.gz
      
      docker run --rm -v $VOLUME:/volume:ro -v $BACKUP_DIR:/backup \
        alpine tar czf $FILE -C /volume .
      sha256sum $FILE > $FILE.sha256
      echo "Backup: $FILE ($(stat -c%s $FILE) bytes), SHA256: $(cut -d' ' -f1 $FILE.sha256)"
      
    • 定时任务(每日 2:00):0 2 * * * /usr/local/bin/backup_volume.sh
    • 校验示例:sha256sum -c /backup/docker/volumes/my_volume_*.tar.gz.sha256
      以上方法覆盖镜像、容器目录与卷的主流备份路径,其中卷的“临时容器+tar”方式通用且易于迁移。

三、恢复流程与示例

  • 恢复镜像:docker load -i /backup/docker/images/myimage_2025-12-09.tar
  • 恢复卷:
    docker run --rm \
      -v my_volume:/volume \
      -v /backup/docker/volumes:/backup \
      alpine tar xzf /backup/my_volume_2025-12-09.tar.gz -C /volume
    
  • 恢复容器目录数据:docker cp /backup/docker/containers/<容器名>_html_2025-12-09 <容器名或ID>:/var/www/html
  • 用编排重建服务:在包含卷挂载与端口映射的docker-compose.yml所在目录执行
    • docker-compose up -d(若镜像不存在会自动拉取或先执行docker load导入)
  • 验证:检查数据完整性(如文件数量/大小/校验和)、关键进程状态与业务连通性。
    上述镜像/目录/卷的恢复与编排重建步骤可直接复用前述备份产物。

四、高级场景与注意事项

  • 在线热迁移与近零停机(实验性):利用CRIU做容器内进程/容器的检查点-恢复(Checkpoint/Restore),可在两台主机间迁移运行中的容器状态;需满足内核与Docker版本支持、启用实验特性并进行充分测试。
  • 备份策略选择:
    • 全量备份:实现简单、恢复快,适合中小数据量或高频恢复场景。
    • 增量备份:节省存储,但恢复链更复杂;可结合rsync或备份工具实现。
  • 安全与合规:对敏感数据在传输/落盘时启用加密访问控制;定期异地/离线存放副本并做恢复演练。
  • 重要提示:
    • 直接访问**/var/lib/docker/volumes/**需确保Docker服务与权限正确,生产环境更推荐“临时容器+tar”的方式,避免破坏卷元数据。
    • 对数据库等状态服务,优先采用应用/文件系统一致性手段(如锁表、快照)或短暂停机,再执行备份。
      CRIU热迁移适合特定场景,使用前务必在测试环境验证完整性与回滚方案。

0