registry-cleaner/regclean

95 lines
3.2 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# URL локального реестра
REGISTRY_URL="http://localhost:5000"
# Имя контейнера реестра (для команды clean)
REGISTRY_CONTAINER="registry"
check_registry() {
if ! docker ps | grep -q "$REGISTRY_CONTAINER"; then
echo "Ошибка: контейнер реестра '$REGISTRY_CONTAINER' не запущен."
exit 1
fi
}
get_tags() {
local image_name="$1"
if [ -z "$image_name" ]; then
echo "Ошибка: укажите имя образа (например, ./script.sh get astra-docker)"
exit 1
fi
response=$(curl -s "$REGISTRY_URL/v2/$image_name/tags/list")
if echo "$response" | grep -q "errors"; then
echo "Ошибка: не удалось получить теги для '$image_name'. Возможно, образ не существует."
echo "$response"
exit 1
fi
tags=$(echo "$response" | grep -o '"tags":\s*\[[^]]*\]' | sed 's/"tags":\s*\[\(.*\)\]/\1/' | tr -d '"' | tr ',' '\n')
if [ -z "$tags" ]; then
echo "Теги для '$image_name' не найдены."
else
echo "Теги для '$image_name':"
echo "$tags"
fi
}
delete_image() {
local image_name="$1"
local tag="$2"
if [ -z "$image_name" ] || [ -z "$tag" ]; then
echo "Ошибка: укажите имя образа и тег (например, ./script.sh del astra-docker 1.7.25080.1522)"
exit 1
fi
digest=$(curl -s -v -H "Accept: application/vnd.docker.distribution.manifest.v2+json" "$REGISTRY_URL/v2/$image_name/manifests/$tag" 2>&1 | grep "Docker-Content-Digest" | awk '{print $3}' | tr -d '\r')
if [ -z "$digest" ]; then
echo "Ошибка: не удалось получить Digest для '$image_name:$tag'."
exit 1
fi
echo "Найден Digest: $digest"
delete_response=$(curl -s -X DELETE "$REGISTRY_URL/v2/$image_name/manifests/$digest")
if [ -n "$delete_response" ] && echo "$delete_response" | grep -q "errors"; then
echo "Ошибка при удалении '$image_name:$tag':"
echo "$delete_response"
exit 1
fi
echo "Успешно удален '$image_name:$tag' (Digest: $digest)"
}
clean_registry() {
check_registry
echo "Запуск очистки ненужных слоев..."
docker exec "$REGISTRY_CONTAINER" bin/registry garbage-collect /etc/docker/registry/config.yml
if [ $? -eq 0 ]; then
echo "Очистка завершена успешно."
else
echo "Ошибка при очистке."
exit 1
fi
}
case "$1" in
"get")
get_tags "$2"
;;
"del")
delete_image "$2" "$3"
;;
"clean")
clean_registry
;;
*)
echo "Использование:"
echo " ./script.sh get <имя_образа> - получить список тегов"
echo " ./script.sh del <имя_образа> <тег> - удалить образ с указанным тегом"
echo " ./script.sh clean - очистить ненужные слои"
exit 1
;;
esac