Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Чтобы управлять размером Реестра контейнеров Azure, необходимо периодически удалять данные устаревших образов. Хотя некоторые образы контейнеров, развернутые в рабочей среде, могут потребовать долговременного хранения, другие, как правило, могут быть удалены быстрее. Например, в сценарии автоматизированной сборки и тестирования реестр может быть быстро заполнен изображениями, которые никогда не придется развертывать, и после того, как завершится этап построения и тестирования, они незамедлительно могут быть удалены.
Так как данные образов можно удалить несколькими способами, важно понимать, как каждая из операций удаления влияет на использование хранилища. В этой статье описываются несколько способов удаления данных образа.
- Удаление репозитория: удаляются все образы и все уникальные слои в нем.
- Удаление по тегу: Удаляет образ, тег, все уникальные слои, указанные в образе, и все другие теги, связанные с ним.
- Удаление по дайджесту манифеста: Удаляет образ, все уникальные слои, на которые ссылается образ, и все теги, связанные с образом.
Общие сведения об этих основных понятиях см. в статье о реестрах, репозиториях и образах.
Примечание.
После удаления данных образа Реестр контейнеров Azure немедленно прекращает выставление счетов за соответствующее хранилище. Однако реестр восстанавливает связанное дисковое пространство с помощью асинхронного процесса. Для очистки слоев в реестре и отображения обновленных сведений об использовании хранилища требуется некоторое время.
Удаление репозитория
При удалении репозитория удаляются все образы хранилища, включая все теги, уникальные слои и манифесты. При удалении репозитория восстанавливается пространство для хранения, используемое образами, которые ссылаются на уникальные слои в этом репозитории.
Следующая команда Azure CLI удаляет репозиторий acr-helloworld и все теги и манифесты репозитория. Если слои, на которые ссылаются удаляемые манифесты, никак не связаны с другими образами реестра, их данные слоя также удаляются, освобождая пространство для хранения.
az acr repository delete --name myregistry --repository acr-helloworld
Удаление по тегу
С помощью операции удаления можно удалить отдельные образы из репозитория, указав имя репозитория и тег. При удалении по тегу восстанавливается дисковое пространство, используемое любыми уникальными слоями в образе (слои, которые не используются совместно с другими образами в реестре).
Чтобы удалить тег, используйте команду az acr repository delete и укажите имя образа в параметре --image
. Удаляются все уникальные слои образа и все другие теги, связанные с удаляемым образом.
Пример удаления образа acr-helloworld:latest из реестра myregistry.
az acr repository delete --name myregistry --image acr-helloworld:latest
This operation will delete the manifest 'sha256:0a2e01852872580b2c2fea9380ff8d7b637d3928783c55beb3f21a6e58d5d108' and all the following images: 'acr-helloworld:latest', 'acr-helloworld:v3'.
Are you sure you want to continue? (y/n):
Совет
Удаление по тегу не следует путать с удалением самого тега (снятием тега). Удалить тег можно с помощью команды Azure CLI az acr repository untag. Когда вы снимаете тег с образа, пространство не освобождается, так как его манифест и данные слоя остаются в реестре. Удаляется только ссылка на тег.
Удаление с помощью дайджеста манифеста
Дайджест манифеста может быть связан с одним, несколькими тегами или не иметь связей с тегами вообще. При удалении с помощью дайджеста все теги, связанные манифестом, удаляются, как и данные слоя для любых слоев, уникальных для образа. Данные общего слоя не удаляются.
Для удаления с помощью дайджеста сначала перечислите дайджесты манифеста для репозитория, содержащего изображения, которые необходимо удалить. Например:
az acr manifest list-metadata --name acr-helloworld --registry myregistry
[
{
"digest": "sha256:0a2e01852872580b2c2fea9380ff8d7b637d3928783c55beb3f21a6e58d5d108",
"tags": [
"latest",
"v3"
],
"timestamp": "2018-07-12T15:52:00.2075864Z"
},
{
"digest": "sha256:3168a21b98836dda7eb7a846b3d735286e09a32b0aa2401773da518e7eba3b57",
"tags": [
"v2"
],
"timestamp": "2018-07-12T15:50:53.5372468Z"
}
]
Затем в команде az acr repository delete необходимо указать дайджест, который требуется удалить. Команда имеет следующий формат.
az acr repository delete --name <acrName> --image <repositoryName>@<digest>
Например, чтобы удалить последний указанный манифест из предыдущего вывода (с тегом "v2").
az acr repository delete --name myregistry --image acr-helloworld@sha256:3168a21b98836dda7eb7a846b3d735286e09a32b0aa2401773da518e7eba3b57
This operation will delete the manifest 'sha256:3168a21b98836dda7eb7a846b3d735286e09a32b0aa2401773da518e7eba3b57' and all the following images: 'acr-helloworld:v2'.
Are you sure you want to continue? (y/n):
acr-helloworld:v2
Образ удаляется из реестра, как и любые данные слоя, уникальные для этого образа. Если манифест связан с несколькими тегами, все связанные теги также удаляются.
Удалите дайджесты по временной метке
Чтобы сохранить размер репозитория или реестра, может потребоваться периодически удалять дайджесты манифеста, которые старше определенной даты.
Следующая команда Azure CLI выводит все дайджесты манифеста в репозитории старше указанной метки времени в порядке возрастания. Замените <acrName>
и <repositoryName>
значениями, уместными для вашей среды. Метка времени может быть либо полным выражением даты и времени, либо только датой, как в данном примере.
az acr manifest list-metadata --name <repositoryName> --registry <acrName> \
--orderby time_asc -o tsv --query "[?lastUpdateTime < '2019-04-05'].[digest, lastUpdateTime]"
Определив устаревшие дайджесты манифеста, можно выполнить следующий скрипт Bash, чтобы удалить дайджесты манифеста старше указанной метки времени. Для работы этого сценария требуется Azure CLI и xargs. По умолчанию, сценарий не выполняет удаление. Чтобы включить удаление образа, измените значение ENABLE_DELETE
на true
.
Предупреждение
С осторожностью используйте следующие примеры сценариев — данные удаленных изображений восстановлению не подлежат. Если у вас есть системы, которые получают образы с помощью дайджеста манифеста (вместо по имени образа), запускать эти сценарии не стоит. Удаление дайджестов манифестов помешает этим системам получать образы из вашего реестра. Взамен использования манифеста, попробуйте принять схему уникальных тегов, что является рекомендуемой наилучшей практикой.
#!/bin/bash
# WARNING! This script deletes data!
# Run only if you do not have systems
# that pull images via manifest digest.
# Change to 'true' to enable image delete
ENABLE_DELETE=false
# Modify for your environment
# TIMESTAMP can be a date-time string such as 2019-03-15T17:55:00.
REGISTRY=myregistry
REPOSITORY=myrepository
TIMESTAMP=2019-04-05
# Delete all images older than specified timestamp.
if [ "$ENABLE_DELETE" = true ]
then
az acr manifest list-metadata --name $REPOSITORY --registry $REGISTRY \
--orderby time_asc --query "[?lastUpdateTime < '$TIMESTAMP'].digest" -o tsv \
| xargs -I% az acr repository delete --name $REGISTRY --image $REPOSITORY@% --yes
else
echo "No data deleted."
echo "Set ENABLE_DELETE=true to enable deletion of these images in $REPOSITORY:"
az acr manifest list-metadata --name $REPOSITORY --registry $REGISTRY \
--orderby time_asc --query "[?lastUpdateTime < '$TIMESTAMP'].[digest, lastUpdateTime]" -o tsv
fi
Удалите изображения без тегов
Как упоминается в разделе Дайджест манифеста, при отправке изменённого образа с использованием существующего тега, предыдущий образ теряет свой тег, что приводит к созданию осиротевшего (или "несвязанного") образа. Манифест ранее отправленного образа и данные его слоя остаются в реестре. Рассмотрим следующую последовательность событий.
Отправка образа acr-helloworld с тегом latest.
docker push myregistry.azurecr.io/acr-helloworld:latest
Проверьте манифесты для репозитория acr-helloworld.
az acr manifest list-metadata --name acr-helloworld --registry myregistry
[ { "digest": "sha256:d2bdc0c22d78cde155f53b4092111d7e13fe28ebf87a945f94b19c248000ceec", "tags": [ "latest" ], "timestamp": "2018-07-11T21:32:21.1400513Z" } ]
Измените Dockerfile acr-helloworld.
Отправка образа acr-helloworld с тегом latest.
docker push myregistry.azurecr.io/acr-helloworld:latest
Проверьте манифесты для репозитория acr-helloworld.
az acr manifest list-metadata --name acr-helloworld --registry myregistry
[ { "architecture": "amd64", "changeableAttributes": { "deleteEnabled": true, "listEnabled": true, "quarantineDetails": "{\"state\":\"Scan Passed\",\"link\":\"https://aka.ms/test\",\"scanner\":\"Azure Security Monitoring-Qualys Scanner\",\"result\":{\"version\":\"2020-05-13T00:23:31.954Z\",\"summary\":[{\"severity\":\"High\",\"count\":2},{\"severity\":\"Medium\",\"count\":0},{\"severity\":\"Low\",\"count\":0}]}}", "quarantineState": "Passed", "readEnabled": true, "writeEnabled": true }, "configMediaType": "application/vnd.docker.container.image.v1+json", "createdTime": "2020-05-16T04:25:14.3112885Z", "digest": "sha256:eef2ef471f9f9d01fd2ed81bd2492ddcbc0f281b0a6e4edb700fbf9025448388", "imageSize": 22906605, "lastUpdateTime": "2020-05-16T04:25:14.3112885Z", "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "os": "linux", "timestamp": "2020-05-16T04:25:14.3112885Z" } ]
Массив тегов удаляется из метаданных при отключении изображения. Этот манифест существует в реестре вместе с уникальными данными слоя, на которые он ссылается. Чтобы удалить потерянные образы и их данные слоя, необходимо удалить дайджест манифеста.
Автоматическая очистка тегов и манифестов
Реестр контейнеров Azure предоставляет следующие автоматические методы удаления тегов и манифестов, а также связанные с ними уникальные данные слоя.
Создайте задачу ACR, которая выполняет команду контейнера
acr purge
, чтобы удалить все теги старше определенного времени или соответствующие заданному фильтру имен. При необходимости настройтеacr purge
для удаления манифестов без тегов.В настоящее время команда контейнера
acr purge
доступна в предварительной версии. Более подробные сведения см. в разделе Автоматическая очистка образов из реестра контейнеров Azure.При необходимости задайте политику хранения для каждого реестра, чтобы управлять манифестами без тегов. При включении политики хранения манифесты образов в реестре, у которых нет связанных тегов, а также данные базового слоя, автоматически удаляются после заданного периода.
Политика хранения на данный момент является функцией предварительного просмотра в реестрах контейнеров класса Premium. Политика хранения применяется только к манифестам без тегов, созданным после вступления политики в силу.
Следующие шаги
Дополнительные сведения о хранилище образов в реестре контейнеров Azure см. в статье Хранилище образов контейнеров в реестре контейнеров Azure.