Files
devops/tools/docker_backup.sh
2025-07-12 16:18:49 +08:00

43 lines
1.2 KiB
Bash
Executable File

#!/bin/bash
set -e
# =====================
# 参数检查
if [[ $# -lt 2 ]]; then
echo "用法: $0 <容器名> <镜像名> [保留备份个数]"
echo "示例: $0 dev-env dev-env 3"
exit 1
fi
CONTAINER_NAME="$1"
IMAGE_NAME="$2"
KEEP_BACKUPS="${3:-3}" # 默认保留 3 个
# =====================
TAG_LATEST="${IMAGE_NAME}:latest"
BACKUP_TAG="${IMAGE_NAME}:backup-$(date +%Y%m%d-%H%M%S)"
echo "📦 正在为镜像 '${TAG_LATEST}' 生成备份..."
docker tag "${TAG_LATEST}" "${BACKUP_TAG}"
echo "✅ 备份完成: ${BACKUP_TAG}"
echo "📝 提交容器 '${CONTAINER_NAME}' 到镜像 '${TAG_LATEST}'..."
docker commit "${CONTAINER_NAME}" "${TAG_LATEST}"
echo "✅ 提交完成: ${TAG_LATEST}"
echo "🧹 清理多余的备份,只保留最近 ${KEEP_BACKUPS} 个..."
# 找出多余的备份镜像
BACKUPS=$(docker images --format "{{.Repository}}:{{.Tag}} {{.CreatedAt}}" | grep "${IMAGE_NAME}:backup-" | sort -r -k2 | awk '{print $1}')
COUNT=0
for b in ${BACKUPS}; do
COUNT=$((COUNT+1))
if [ $COUNT -gt ${KEEP_BACKUPS} ]; then
echo "🗑️ 删除旧备份: ${b}"
docker rmi "${b}"
fi
done
echo "🎉 完成!"
docker images | grep "${IMAGE_NAME}"