diff --git a/tools/docker_backup.sh b/tools/docker_backup.sh new file mode 100755 index 0000000..5d566c9 --- /dev/null +++ b/tools/docker_backup.sh @@ -0,0 +1,43 @@ +#!/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}" \ No newline at end of file