docker确实非常的好用,但是如果使用了容器卷,数据不是很方便备份,这个代码可以简单的讲所有活动的容器卷中的内容打包备份,让数据更安全。
这个脚本是为了备份运行中的 Docker 容器的所有卷。通过这个脚本,您可以将所有活动容器的卷备份到指定的备份目录中,每个备份操作都会创建一个包含当前日期和时间的新目录,以确保备份的有序和易于管理。
#!/bin/bash
# 定义备份的根目录
BACKUP_ROOT="/root/backup"
# 使用当前日期和时间创建备份目录,格式为 YYYYMMDD_HHMMSS
CURRENT_DATE=$(date +"%Y%m%d_%H%M%S")
BACKUP_DIR="$BACKUP_ROOT/$CURRENT_DATE"
# 确保备份目录存在
mkdir -p $BACKUP_DIR
# 获取所有正在运行的容器的卷
VOLUMES=$(docker inspect $(docker ps -q) --format '{{ range .Mounts }}{{ .Name }} {{ end }}' | tr ' ' '\n' | sort -u)
# 遍历每个卷并备份
for VOLUME in $VOLUMES; do
# 获取卷的挂载点
MOUNT_POINT=$(docker volume inspect $VOLUME | grep Mountpoint | cut -d '"' -f 4)
# 定义备份文件的名称
BACKUP_FILE="$BACKUP_DIR/$VOLUME.tar.gz"
# 使用 tar 命令备份卷
tar -czf $BACKUP_FILE -C $MOUNT_POINT .
echo "Backup for volume $VOLUME completed: $BACKUP_FILE"
done
echo "All backups completed in directory: $BACKUP_DIR"
以下是该脚本的主要步骤和功能说明:
定义备份根目录:
- 脚本首先定义了备份的根目录 (
BACKUP_ROOT
),在本例中为 "/root/backup"。
- 脚本首先定义了备份的根目录 (
创建备份目录:
- 使用当前的日期和时间 (
YYYYMMDD_HHMMSS
格式) 创建备份目录。这样可以确保每次备份都有一个唯一的目录,避免覆盖先前的备份。
- 使用当前的日期和时间 (
获取所有正在运行的容器的卷:
- 使用
docker
命令获取所有正在运行的容器的卷。这个步骤是通过docker inspect
和docker ps
命令结合来实现的。
- 使用
遍历并备份每个卷:
- 对获取到的每个卷执行备份操作。备份是通过
tar
命令实现的,将卷的内容打包成tar.gz
格式的文件。
- 对获取到的每个卷执行备份操作。备份是通过
定义并创建备份文件:
- 对于每个卷,脚本定义了备份文件的名称,并确保备份文件被保存在先前创建的备份目录中。
输出备份完成信息:
- 在备份每个卷后,脚本会输出一个消息,表明该卷的备份已完成。在所有备份完成后,脚本还会输出一个消息,指明所有备份都已完成,并提供备份目录的路径。
通过运行此脚本,您可以轻松地备份所有正在运行的 Docker 容器的卷,而无需手动执行每个备份操作。这对于保护数据和确保您可以在必要时恢复数据非常重要。