Удалите немаркированные изображения из Google Cloud Registry

Когда мы многократно нажимаем на gcr.io с тем же именем изображения и версией (тегом), появляется большое количество немаркированных изображений.
Есть ли простой способ удалить все немаркированные изображения из проекта или хотя бы для одного изображение, чтобы избежать затрат на хранение?


person Robert Lacok    schedule 27.09.2017    source источник


Ответы (7)


gcloud container images list-tags gcr.io/project-id/repository --format=json --limit=unlimited предоставит вам легко доступный json blob информации для изображений в репозитории (например, дайджесты со связанными тегами).

Чтобы просто перечислить все дайджесты, в которых отсутствуют теги:

gcloud container images list-tags gcr.io/project-id/repository --filter='-tags:*' --format='get(digest)' --limit=unlimited

Что вы можете перебирать и удалять с помощью: gcloud container images delete --quiet gcr.io/project-id/repository@DIGEST

person jsand    schedule 27.09.2017

Удобно, когда вы склеиваете их с помощью awk и xargs

gcloud container images list-tags gcr.io/${PROJECT_ID}/${IMAGE} --filter='-tags:*' --format='get(digest)' --limit=unlimited | awk '{print "gcr.io/${PROJECT_ID}/${IMAGE}@" $1}' | xargs gcloud container images delete --quiet

person nuzz    schedule 21.03.2018

Предыдущий однострочник у меня не работал. Я использую это сейчас

  • Удалить все изображения без тегов для заданных PROJECT_ID и IMAGE
  • Используйте Xargs -I, который создает токен (в данном случае называется {arg})
gcloud container images list-tags gcr.io/${PROJECT_ID}/${IMAGE} --filter='-tags:*' --format='get(digest)' --limit=unlimited | xargs -I {arg} gcloud container images delete  "gcr.io/${PROJECT_ID}/${IMAGE}@{arg}" --quiet
person Benos    schedule 19.09.2019

Моим вариантом использования было удаление всех немаркированных изображений из определенного проекта. Для этого я написал простой скрипт:

delete_untagged() {
    echo "   |-Deleting untagged images for $1"
    while read digest; do
       gcloud container images delete $1@$digest --quiet 2>&1 | sed 's/^/        /'
    done < <(gcloud container images list-tags $1 --filter='-tags:*' --format='get(digest)' --limit=unlimited)
}

delete_for_each_repo() {
    echo "|-Will delete all untagged images in $1"
    while read repo; do
        delete_untagged $repo
    done < <(gcloud container images list --repository $1 --format="value(name)")
}

delete_for_each_repo gcr.io/<project-id>/<repository>

Полный скрипт можно найти здесь: https://gist.github.com/lahsivjar/2b011d7043d68a1 >

Надеюсь, это будет кому-то полезно

person lahsivjar    schedule 31.10.2018

Это задокументировано здесь, но следует отметить одну важную вещь:

ДАЙДЖЕСТ должен иметь форму «sha256:<digest>».

Так что сначала поймайте форму sha256:<digest> немаркированных изображений

$ DIGEST=`gcloud container images list-tags gcr.io/[PROJECT-ID]/[IMAGE] \
--filter='-tags:*' --format='get(digest)'`
$ echo $DIGEST
sha256:7c077a9ca45aea7134d8436a3071aceb5fa62758cc86eadec63f02692b7875f7

Затем используйте переменную, чтобы удалить ее

$ gcloud container images delete --quiet gcr.io/[PROJECT-ID]/[IMAGE]@$DIGEST
Digests:
- gcr.io/[PROJECT-ID]/[IMAGE]@sha256:7c077a9ca45a......
Deleted [gcr.io/[PROJECT-ID]/[IMAGE]@sha256:7c077a9ca45a......].
person Chetabahana    schedule 12.04.2019

Powershell версии одного лайнера, размещенного @Benos

gcloud container images list-tags gcr.io/myprojectname/myimagename --filter='-tags:*' --format='get(tags)' --limit=unlimited | ForEach-Object { gcloud container images delete "gcr.io/myprojectname/myimagename:$PSItem" --quiet } 

Удалите --filter='-tags:*', чтобы удалить все теги определенного изображения (это то, что я пытался выполнить)

person Dave    schedule 02.02.2020
comment
Пришлось изменить: на @, чтобы заставить его работать: gcr.io/myprojectname/myimagename@$PSItem - person Emmanuel Osimosu; 11.10.2020

Исправленная команда Powershell

gcloud container images list-tags gcr.io/myprojectname/myimagename --filter='-tags:*' --format='get(digest)' --limit=unlimited | ForEach-Object { gcloud container images delete "gcr.io/myprojectname/myimagename@$PSItem" --quiet }
person MattyBoy    schedule 01.06.2021