43 lines
1.2 KiB
Bash
Executable File
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}" |