init
This commit is contained in:
commit
821974b567
|
@ -0,0 +1,94 @@
|
|||
#!/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
|
Loading…
Reference in New Issue