Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При использовании реестра контейнеров Azure в рамках рабочего процесса разработки реестр может быстро заполниться образами или другими артефактами, которые перестают быть нужными в течение короткого периода времени. Возможно, следует удалять все теги старше определенного периода или соответствующие указанному фильтру имен.
Чтобы быстро удалить несколько артефактов, используйте acr purge команду. Вы можете запускать acr purge как задачу ACR по запросу или запланированную задачу ACR.
Внимание
acr purge в настоящее время находится в предварительной версии.
Просмотрите дополнительные условия использования Microsoft Azure для предварительных версий, чтобы ознакомиться с юридическими условиями, применяемыми к функциям Azure, которые находятся в бета-версии, предварительной версии или иначе ещё не выпущены в общедоступный релиз.
Команда acr purge (предварительная версия) в настоящее время распространяется в общедоступном образе контейнера (mcr.microsoft.com/acr/acr-cli:0.19), встроенном из исходного кода в репозитории acr-cli в GitHub.
Используйте Azure Cloud Shell или локальную установку Azure CLI для запуска примеров задач ACR в этой статье. Сведения об установке или обновлении см. в разделе Install Azure CLI.
Предупреждение
Используйте команду acr purge с осторожностью - удаленные данные изображения невосстановимы. Если у вас есть системы, которые извлекают изображения по дайджесту манифеста (в отличие от имени изображения), не очищайте изображения без тегов. Удаление немеченых образов предотвращает извлечение образов этими системами из вашего реестра. Вместо извлечения по манифесту, рассмотрите возможность использования уникальной схемы тегов.
Чтобы удалить отдельные теги изображения или манифесты с помощью команд Azure CLI, см. статью Delete container images in Реестр контейнеров Azure.
Использование команды очистки
Команда acr purge удаляет изображения по тегу в репозитории. Он удаляет все изображения, соответствующие фильтру имен, и старше указанной длительности. По умолчанию команда удаляет только ссылки на теги, а не базовые манифесты и данные слоя. Команда также может удалять манифесты.
Примечание.
acr purge не удаляет тег изображения или репозиторий, если write-enabled для атрибута задано значение false. Дополнительные сведения см. в разделе Блокировка образа контейнера в реестре контейнеров Azure.
acr purge предназначен для выполнения в качестве команды контейнера в задаче ACR. Он автоматически проходит проверку подлинности в реестре, где выполняется задача и выполняет там действия. Примеры задач в этой статье используют acr purge командный псевдоним вместо полностью квалифицированной команды образа контейнера.
Внимание
Для выполнения команды acr purge стандартная команда — az acr run --registry <YOUR_REGISTRY> --cmd 'acr purge --optional parameter' /dev/null.
Рекомендуется выполнить полную acr purge команду. Например, выполните acr purge --help как az acr run --registry <YOUR_REGISTRY> --cmd 'acr purge --help' /dev/null.
Как минимум, укажите следующие параметры при выполнении acr purge:
-
--filter— имя репозитория регулярное выражение и имя тега регулярное выражение для фильтрации образов в репозитории. Например,--filter "hello-world:.*"соответствует всем тегам вhello-worldрепозитории,--filter "hello-world:^1.*"сопоставляет теги, начиная с1hello-worldрепозитория, и--filter ".*/cache:.*"соответствует всем тегам в репозиториях, заканчивающимися/cache. Вы также можете передать несколько параметров--filter. -
--ago— Строка длительности в стиле Go, указывающая длительность, за пределами которой удаляются изображения. Длительность состоит из последовательности одного или нескольких десятичных чисел, каждое из которых имеет суффикс единицы измерения. Допустимые единицы времени: "d" (дни), "h" (часы) и "m" (минуты). Например,--ago 2d3h6mвыбирает все отфильтрованные изображения, которые были изменены более двух дней, 3 часа и 6 минут назад, и--ago 1.5hвыбирает изображения, которые были изменены более 1,5 часа назад.
acr purge поддерживает несколько необязательных параметров:
-
--untagged— удаляет все манифесты, которые не имеют связанных тегов (без тегов). Этот параметр удаляет непомеченные манифесты в дополнение к тегам, которые команда уже удаляет. Удалите все теги, связанные с манифестом, чтобы очистить его; только после этого можно очистить манифест без тегов с помощью--untagged.
Примечание.
Параметр --untagged принимает во внимание фильтр длительности --ago, начиная с версии mcr.microsoft.com/acr/acr-cli:0.17.
-
--dry-run— Указывает, что данные не удаляются, но команда создает те же выходные данные, что и при выполнении команды без этого флага. Этот параметр полезен для тестирования команды очистки, чтобы убедиться, что она непреднамеренно удаляет данные, которые вы планируете сохранить. -
--keep— указывает последнее количество предназначенных для удаления тегов для каждого репозитория, которые сохраняются. Последние теги определяются временем последнего изменения тега для каждого репозитория, соответствующего указанным--filterпараметрам. -
--concurrency— указывает количество одновременно выполняемых задач очистки. -
--untagged-only— удаляет только манифесты без тегов (висячие манифесты, у которых нет тегов), без предварительного удаления каких-либо тегов. В отличие от стандартного потокаacr purge, который требует--filterи--ago, этот флаг делает эти параметры необязательными. Без--filterэтого он сканирует все репозитории. Вы можете использовать это вместе с--agoдля фильтрации по возрасту и с--keepдля сохранения нескольких последних манифестов без тегов.
Для получения сведений о дополнительных параметрах выполните команду acr purge --help.
acr purge поддерживает другие функции команд ACR Tasks, включая переменные и журналы выполнения задач , которые передаются в поток, а также сохраняются для последующего извлечения.
Выполните команду очистки в задаче по запросу
В следующем примере с помощью команды az acr run выполняется команда acr purge по требованию. В этом примере удаляются все теги изображений и все связанные манифесты в репозитории hello-world в myregistry, которые были изменены более 1 дня назад. Он также удаляет непомеченные манифесты, которые теперь учитывают тот же параметр длительности --ago, что и помеченные изображения. Команда контейнера передается с помощью переменной среды, а задача выполняется без исходного контекста.
# Environment variable for container command line
PURGE_CMD="acr purge --filter 'hello-world:.*' \
--untagged --ago 1d"
az acr run \
--cmd "$PURGE_CMD" \
--registry myregistry \
/dev/null
Выполните команду очистки в запланированной задаче
В следующем примере используется команда az acr task create для создания ежедневной запланированной задачи ACR. Задача очищает теги, измененные более семи дней назад в репозитории hello-world . Команда контейнера передается с помощью переменной среды. Задача выполняется без исходного контекста.
# Environment variable for container command line
PURGE_CMD="acr purge --filter 'hello-world:.*' \
--ago 7d"
az acr task create --name purgeTask \
--cmd "$PURGE_CMD" \
--schedule "0 0 * * *" \
--registry myregistry \
--context /dev/null
Выполните команду az acr task show, чтобы убедиться, что триггер таймера настроен.
Очистка большого количества тегов и манифестов
Очистка большого количества тегов и манифестов может занять несколько минут или больше. Чтобы очистить тысячи тегов и манифестов, команда может потребоваться выполнить дольше времени ожидания по умолчанию 600 секунд для задачи по запросу или 3600 секунд для запланированной задачи. Если команда превышает время выполнения, процесс удаляет только часть тегов и манифестов. Чтобы обеспечить выполнение крупномасштабной очистки, передайте параметр --timeout, чтобы увеличить значение.
Например, следующая задача по запросу задает время ожидания в 3600 секунд (один час):
# Environment variable for container command line
PURGE_CMD="acr purge --filter 'hello-world:.*' \
--ago 1d --untagged"
az acr run \
--cmd "$PURGE_CMD" \
--registry myregistry \
--timeout 3600 \
/dev/null
Пример: Запланированная очистка нескольких репозиториев в реестре
В этом примере рассматривается использование acr purge для периодической очистки нескольких репозиториев в реестре. Например, у вас может быть конвейер разработки, который передает образы в репозитории samples/devimage1 и samples/devimage2. Вы периодически импортируете образы разработки в рабочий репозиторий для развертываний, поэтому вам больше не нужны образы разработки. Еженедельно вы очищаете репозитории samples/devimage1 и samples/devimage2 в процессе подготовки к работе на следующей неделе.
Просмотр предварительной очистки
Перед удалением данных выполните задачу очистки по запросу с помощью --dry-run параметра. В этом параметре показаны теги и манифесты, которые команда очищает без удаления данных.
В следующем примере фильтр в каждом репозитории выбирает все теги. Параметр --ago 0d соответствует изображениям всех возрастов в репозиториях, соответствующих фильтрам. Измените критерии, если это необходимо для вашего сценария. Параметр --untagged указывает на удаление манифестов в дополнение к тегам. Передайте команду контейнера в команду az acr run с помощью переменной среды.
# Environment variable for container command line
PURGE_CMD="acr purge \
--filter 'samples/devimage1:.*' --filter 'samples/devimage2:.*' \
--ago 0d --untagged --dry-run"
az acr run \
--cmd "$PURGE_CMD" \
--registry myregistry \
/dev/null
Просмотрите выходные данные команды, чтобы увидеть теги и манифесты, соответствующие параметрам выбора. Так как команда использует --dry-run, данные не удаляются.
Образец вывода:
[...]
Deleting tags for repository: samples/devimage1
myregistry.azurecr.io/samples/devimage1:232889b
myregistry.azurecr.io/samples/devimage1:a21776a
Deleting manifests for repository: samples/devimage1
myregistry.azurecr.io/samples/devimage1@sha256:81b6f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e788b
myregistry.azurecr.io/samples/devimage1@sha256:3ded859790e68bd02791a972ab0bae727231dc8746f233a7949e40f8ea90c8b3
Deleting tags for repository: samples/devimage2
myregistry.azurecr.io/samples/devimage2:5e788ba
myregistry.azurecr.io/samples/devimage2:f336b7c
Deleting manifests for repository: samples/devimage2
myregistry.azurecr.io/samples/devimage2@sha256:8d2527cde610e1715ad095cb12bc7ed169b60c495e5428eefdf336b7cb7c0371
myregistry.azurecr.io/samples/devimage2@sha256:ca86b078f89607bc03ded859790e68bd02791a972ab0bae727231dc8746f233a
Number of deleted tags: 4
Number of deleted manifests: 4
[...]
Планирование очистки
После проверки, как ведет себя тестовый запуск, создайте запланированную задачу для автоматизации удаления. В следующем примере еженедельная задача планируется на воскресенье в 1:00 UTC и выполняется предыдущая команда очистки:
# Environment variable for container command line
PURGE_CMD="acr purge \
--filter 'samples/devimage1:.*' --filter 'samples/devimage2:.*' \
--ago 0d --untagged"
az acr task create --name weeklyPurgeTask \
--cmd "$PURGE_CMD" \
--schedule "0 1 * * Sun" \
--registry myregistry \
--context /dev/null
Выполните команду az acr task show, чтобы убедиться, что триггер таймера настроен.
Пример очистки только нетегированных манифестов
Иногда может потребоваться удалить только непомеченные манифесты, не затрагивая помеченные образы. Это можно сделать с помощью фильтра репозитория, который не соответствует именам тегов, таким как ^$. Это приводит к тому, что процедура очистки acr пропускает все теги и оценивает только манифесты без тегов.
# Environment variable for container command line
PURGE_CMD="acr purge \
--filter 'samples/devimage1:^$' --filter 'samples/devimage2:^$' \
--ago 0d --untagged"
az acr task create --name weeklyPurgeTask \
--cmd "$PURGE_CMD" \
--schedule "0 1 * * Sun" \
--registry myregistry \
--context /dev/null
Пример: Удаление только манифестов без тегов с --untagged-only
Флаг --untagged-only позволяет проще очищать непривязанные манифесты без удаления каких-либо тегов. В отличие от --untagged, который удаляет манифесты без тегов в дополнение к удалению тегов, --untagged-only вообще не выполняет удаление тегов.
Чтобы удалить все манифесты без тегов во всех репозиториях реестра:
PURGE_CMD="acr purge --untagged-only"
az acr run \
--cmd "$PURGE_CMD" \
--registry myregistry \
/dev/null
Очистка в реестрах с поддержкой ABAC
Реестры с поддержкой Attribute-Based контроль доступа (ABAC) используют разрешения на уровне репозитория вместо ролей на уровне реестра. Команда acr purge автоматически обнаруживает реестры с поддержкой ABAC и настраивает ее проверку подлинности— дополнительные флаги не требуются.
Поскольку реестры ABAC не поддерживают области действия токенов с подстановочными знаками, acr purge обрабатывает репозитории пакетами (по умолчанию: 10). Для каждого пакета запрашивается новый токен доступа, действующий только для этих репозиториев.
Необходимые разрешения
| Разрешение | Role | Объем |
|---|---|---|
| Перечисление репозиториев | Container Registry Repository Catalog Lister |
Registry |
| Чтение, удаление и управление тегами и манифестами | Container Registry Repository Contributor |
Для каждого репозитория |
Примечание.
Условия ABAC можно использовать, чтобы ограничить роль Container Registry Repository Contributor конкретными репозиториями — например, предоставляя право удаления только для samples/*.
Удаление без прав на список
Если у вашей учётной записи нет разрешений Container Registry Repository Catalog Lister, вы всё равно можете удалить теги и манифесты в одном конкретном репозитории, явно указав его в параметре --filter. Так как имя репозитория явно, acr purge не нужно перечислять репозитории. Рассмотрим пример.
PURGE_CMD="acr purge --filter 'hello-world:.+' \
--ago 1d"
az acr run \
--cmd "$PURGE_CMD" \
--registry myregistry \
/dev/null
В этом случае требуется только роль Container Registry Repository Contributor (или эквивалентные разрешения на чтение и удаление) для целевого репозитория.
Поведение частичного доступа
Если --filter соответствует репозиториям, которые ваша учётная запись не может очистить, команда останавливается на первом репозитории, к которому нет доступа, и сообщает, какие репозитории были обработаны, для каких произошла ошибка и какие ещё не были обработаны.
Tip
Используйте конкретный объект --filter, который нацелен только на репозитории, к которым у вашей учётной записи есть доступ. Например, используйте функцию --filter 'samples/.*:.*' вместо --filter '.*:.*'.
Следующие шаги
Узнайте о других вариантах удаления данных изображений в Реестр контейнеров Azure.
Дополнительные сведения о хранилище образов см. в разделе Хранилище образов контейнера в Реестр контейнеров Azure.