2016-12-03 7 views
7

При нажатии изображений на Amazon ECR, если тег уже существует в репо, старое изображение остается в реестре, но переходит в непомеченное состояние.Как удалить немаркированные изображения из реестра AWS ECR Container Registry

Так что если я докер нажимаю image/haha:1.0.0 во второй раз, я делаю это (при условии, что что-то меняется) первое изображение получает от AWS ECR.

Есть ли способ безопасно очистить все реестры от непомеченных изображений?

ответ

4

я на самом деле подделал решение в одну строку с помощью aws cli

aws ecr describe-repositories --output text | awk '{print $5}' | while read line; do aws ecr list-images --repository-name $line --filter tagStatus=UNTAGGED --query 'imageIds[*]' --output text | while read imageId; do aws ecr batch-delete-image --repository-name $line --image-ids imageDigest=$imageId; done; done

Что он делает это:

  • получить все хранилищам
  • для каждого хранилища дают мне все изображения с tagStatus=UNTAGGED
  • для каждого изображения + репо выпуск a batch-delete-image
7

Вы можете удалить все изображения в одном запросе, без петель:

IMAGES_TO_DELETE=$(aws ecr list-images --region $ECR_REGION --repository-name $ECR_REPO --filter "tagStatus=UNTAGGED" --query 'imageIds[*]' --output json) 

aws ecr batch-delete-image --region $ECR_REGION --repository-name $ECR_REPO --image-ids "$IMAGES_TO_DELETE" || true 

Сначала он получает список изображений, которые непомеченная, в формате JSON:

[ {"imageDigest": "sha256:..."}, {"imageDigest": "sha256:..."}, ... ]

Затем он отправляет этот список в batch-image-delete.

Последний || true необходим, чтобы избежать кода ошибки, когда нет непомеченных изображений.

+0

Я не имею '--filter' вариант, какую версию вы используете? (У меня aws-cli/1.10.39) – Dimitris

+0

Обновление: v1.11.44 поддерживает фильтры – Dimitris

1

Теперь, что правила жизненного цикла поддержки ECR (https://docs.aws.amazon.com/AmazonECR/latest/userguide/LifecyclePolicies.html) вы можете использовать для автоматического удаления немаркированных изображений.

Настройка предварительного просмотра Жизненный цикл политики с помощью консоли

Откройте консоль Amazon ECS на https://console.aws.amazon.com/ecs/.

На панели навигации выберите регион, содержащий репозиторий , на котором выполняется предварительный просмотр политики жизненного цикла.

В области переходов выберите Репозитории и выберите репозиторий.

На странице «Все репозитории: репозиторий_имя» выберите «Сухой ход» Правила жизненного цикла, добавьте.

Введите следующие данные для правила политики жизненного цикла:

Для Правила приоритета, введите номер для приоритета правил.

Для правила Описание введите описание политики жизненного цикла правило.

Для статуса изображения выберите либо «Помеченные», либо «Без тегов».

Если вы указали Tagged for Image Status, то для списка префиксов тегов, вы можете указать список тегов изображений, на которых должно приниматься действие с вашей политикой жизненного цикла. Если вы указали Untagged, это поле должно быть пустым.

Для критериев соответствия выберите значения для Count Type, Count Number и Count Unit (если применимо).

Выберите Сохранить

Создание дополнительных правил жизненным циклом политики, повторяя шаги 5-7.

Чтобы запустить предварительный просмотр политики жизненного цикла, выберите Сохранить и просмотреть результаты.

В разделе «Предварительный просмотр изображений» просмотрите влияние вашего жизненного цикла Предварительный просмотр политики.

Если вы удовлетворены результатами предварительного просмотра, выберите Применить как политику жизненного цикла, чтобы создать политику жизненного цикла с указанными правилами .

Отсюда: https://docs.aws.amazon.com/AmazonECR/latest/userguide/lpp_creation.html

+0

Я пробовал действия, перечисленные в вашем ответе, но, похоже, не удаляет старые изображения. При сухом запуске политики он правильно перечисляет все изображения, которые я намереваюсь удалить, но они фактически не удаляются при применении политики. Что-нибудь мне не хватает? – Broadwell