这套工具包括两个脚本,旨在帮助Docker用户自动化备份和恢复所有运行中容器的Docker卷。这些脚本可以大大简化容器数据管理的过程,适用于需要迁移数据到新服务器或仅仅进行定期备份的场景。
特性
- 自动识别:自动识别并备份所有运行中的容器挂载的卷。
- 简易操作:通过简单的命令行操作即可完成备份和恢复。
- 灵活性:支持备份到指定目录,方便管理和迁移。
- 通用性:适用于任何使用Docker卷的容器服务。
如何使用
备份脚本(auto_backup.sh)
- 功能:自动备份所有运行中容器的挂载卷到指定目录。
使用方法:
./auto_backup.sh
- 结果:脚本会创建一个名为
docker-volumes-backups
的目录(如果不存在),并将所有运行中容器的卷备份为.tar.gz
格式存储在此目录下。
恢复脚本(auto_restore.sh)
- 功能:自动从备份文件恢复Docker卷。
使用方法:
./auto_restore.sh
- 注意:确保备份文件位于名为
docker-volumes-backups
的目录中。脚本会读取此目录下的所有.tar.gz
文件,并尝试恢复到对应的Docker卷。
前提条件
- 需要有Docker环境。
对于Linux用户,需要给予脚本执行权限:
chmod +x auto_backup.sh chmod +x auto_restore.sh
注意事项
- 在使用恢复脚本之前,请确保目标Docker环境中不存在同名的卷,除非你明确希望覆盖它们。
- 建议在实际生产环境使用前,先在测试环境中验证脚本的功能。
- 备份和恢复操作可能会占用相当的时间和资源,具体取决于卷的大小和数量,请在系统负载较低的时段进行操作。
通过这两个脚本,用户可以方便快捷地管理Docker卷的备份和恢复,为数据安全和迁移提供了一种有效的解决方案。分享这些脚本时,请确保提供完整的使用说明,帮助其他人正确地使用它们。
自动备份脚本(auto_backup.sh)
这个脚本会寻找所有运行中的容器,并备份它们挂载的卷到当前目录下。
#!/bin/bash
# 定义备份文件的保存目录
BACKUP_DIR=./docker-volumes-backups
mkdir -p "${BACKUP_DIR}"
# 获取所有运行中的容器ID
container_ids=$(docker ps -q)
# 对每个容器ID进行循环
for id in ${container_ids}; do
# 获取挂载的卷
volume_paths=$(docker inspect $id --format '{{ range .Mounts }}{{ .Name }}:{{ .Source }} {{ end }}')
# 如果容器没有挂载卷,则跳过
if [ -z "${volume_paths}" ]; then
continue
fi
# 对每个挂载的卷进行循环
for volume_path in ${volume_paths}; do
IFS=':' read -r volume_name volume_source <<< "${volume_path}"
echo "正在备份 ${volume_name}..."
# 创建备份
docker run --rm -v "${volume_source}:/volume" -v "${BACKUP_DIR}":/backup ubuntu tar czvf "/backup/${volume_name}-backup.tar.gz" /volume
done
done
echo "备份完成,文件保存在 ${BACKUP_DIR}"
自动恢复脚本(auto_restore.sh)
这个脚本会扫描当前目录下的所有备份文件,并尝试根据这些文件恢复Docker卷。
#!/bin/bash
# 定义备份文件的位置
# 使用 pwd 命令获取当前工作目录的绝对路径,并构建备份目录的绝对路径
BACKUP_DIR="$(pwd)/docker-volumes-backups"
# 检查备份目录是否存在
if [ ! -d "${BACKUP_DIR}" ]; then
echo "备份目录 ${BACKUP_DIR} 不存在。"
exit 1
fi
# 获取所有备份文件
backup_files=$(ls ${BACKUP_DIR}/*.tar.gz)
# 对每个备份文件进行循环
for file in ${backup_files}; do
# 从文件名中提取卷名
volume_name=$(basename "${file}" "-backup.tar.gz")
echo "正在恢复 ${volume_name}..."
# 检查是否存在同名卷,如果不存在,则创建
if ! docker volume ls --format '{{ .Name }}' | grep -qw "${volume_name}"; then
docker volume create "${volume_name}"
fi
# 恢复卷
docker run --rm -v "${volume_name}:/volume" -v "${BACKUP_DIR}":/backup ubuntu tar xzvf "/backup/${volume_name}-backup.tar.gz" -C /volume
done
echo "恢复完成。"
使用说明
- 备份:在原服务器上运行
./auto_backup.sh
来自动备份所有运行中容器的卷。 - 恢复:在新服务器上,将备份文件传输到相同的备份目录,然后运行
./auto_restore.sh
来恢复卷。
这些脚本自动化了备份和恢复过程,大大简化了管理Docker卷的复杂性。在使用之前,请确保在安全环境中测试这些脚本,以验证它们按预期工作。
最好能设定时间,自动备份就最好了。
非常好用