ubuntu

Docker容器如何在Ubuntu上备份

小樊
43
2025-10-10 00:28:43
栏目: 智能运维

Docker容器在Ubuntu上的备份方法及实践

一、备份前的准备工作

在备份Docker容器前,需明确数据持久化是关键——容器内的数据默认随容器删除而丢失,因此需优先将数据存储在**Docker卷(Volumes)**中(而非容器文件系统)。可通过docker volume ls查看现有卷,docker volume create <volume_name>创建新卷,并在运行容器时通过-v <volume_name>:/data挂载卷(如docker run -d -v my_volume:/data --name my_container my_image)。

二、常用备份方法

1. 使用docker commit+docker save(备份容器状态与文件系统)

2. 使用docker export+tar(备份容器文件系统)

3. 备份Docker卷(关键数据保护)

三、自动化备份脚本示例

可通过Shell脚本实现定期自动备份,以下脚本备份所有容器镜像、容器文件系统及卷数据:

#!/bin/bash
# 设置备份目录
BACKUP_DIR="/backup/docker"
mkdir -p $BACKUP_DIR

# 备份所有容器镜像
echo "Backing up Docker images..."
docker images -q | while read image_id; do
    docker save $image_id > "$BACKUP_DIR/image_${image_id}.tar"
done

# 备份所有容器文件系统
echo "Backing up Docker containers..."
docker ps -a -q | while read container_id; do
    docker export $container_id > "$BACKUP_DIR/container_${container_id}.tar"
done

# 备份所有卷数据
echo "Backing up Docker volumes..."
for volume in $(docker volume ls | awk '{print $1}'); do
    echo "Backing up volume $volume..."
    docker run --rm -v $volume:/volume -v $(pwd):/backup busybox tar cvf "/backup/volume_${volume}_backup.tar" -C /volume .
done

echo "Backup completed. Files stored in $BACKUP_DIR."

使用方法:将脚本保存为backup_docker.sh,赋予执行权限(chmod +x backup_docker.sh),再通过cron设置定时任务(如每日凌晨2点执行):

crontab -e

添加以下行:

0 2 * * * /path/to/backup_docker.sh

四、恢复流程

1. 恢复镜像

docker load -i <backup_file.tar>

例如:docker load -i my_backup.tar

2. 恢复容器

docker run -d --name <new_container_name> <backup_image_name>:<tag>

例如:docker run -d --name my_restored_container my_backup:latest

3. 恢复卷数据

docker run --rm -v <new_volume_name>:/volume -v $(pwd):/backup busybox tar xvf "/backup/volume_<volume_name>_backup.tar" -C /volume

例如:docker run --rm -v my_new_volume:/volume -v $(pwd):/backup busybox tar xvf "/backup/my_volume_backup.tar" -C /volume

五、注意事项

0
看了该问题的人还看了