1 、容器与镜像备份

# 创建容器备份脚本

cat > /usr/local/bin/docker_backup.sh << 'EOF'

#!/bin/bash

BACKUP_DIR=/backup/docker

TIMESTAMP=$(date +%Y%m%d_%H%M%S)

mkdir -p $BACKUP_DIR/$TIMESTAMP

# 备份容器配置

docker ps --format '{{.Names}}' | while read -r name; do

  docker inspect $name > $BACKUP_DIR/$TIMESTAMP/${name}_inspect.json

done

# 备份镜像

docker images --format '{{.Repository}}:{{.Tag}}' | grep -v "<none>" | while read -r img; do

  docker save -o $BACKUP_DIR/$TIMESTAMP/$(echo $img | tr '/' '_' | tr ':' '_').tar $img

done

# 保留最近30天备份

find $BACKUP_DIR -maxdepth 1 -type d -mtime +30 -exec rm -rf {} \;

EOF

chmod +x /usr/local/bin/docker_backup.sh

# 添加到定时任务

echo "0 2 * * * /usr/local/bin/docker_backup.sh" >> /etc/crontab

2、数据卷备份与恢复

# 备份数据卷

docker run --rm -v <卷名>:/source -v /backup:/dest alpine tar -czf /dest/<卷名>_$(date +%Y%m%d).tar.gz -C /source .

# 恢复数据卷

docker volume create <新卷名>

docker run --rm -v <新卷名>:/dest -v /backup:/source alpine sh -c "tar -xzf /source/<卷名>_<日期>.tar.gz -C /dest"

# 验证恢复的数据

docker run --rm -v <新卷名>:/data alpine ls -l /data

3、Docker 系统迁移

# 在源主机:导出Docker系统信息

docker system save -o /backup/docker_system.tar $(docker images --format '{{.Repository}}:{{.Tag}}' | grep -v "<none>")

# 复制备份到目标主机

scp /backup/docker_system.tar user@target-host:/backup/

# 在目标主机:加载备份

docker system load -i /backup/docker_system.tar

# 迁移数据卷

rsync -avz /var/lib/docker/volumes/ user@target-host:/var/lib/docker/volumes/

# 启动容器(使用原配置)

docker-compose up -d  # 若使用Compose

# 或手动启动容器(根据备份的inspect信息)

更多推荐