Automatyczne przeczyszczanie obrazów z rejestru kontenerów platformy Azure
W przypadku korzystania z rejestru kontenerów platformy Azure w ramach przepływu pracy programowania rejestr może szybko wypełnić obrazy lub inne artefakty, które nie są potrzebne po krótkim okresie. Możesz usunąć wszystkie tagi starsze niż określony czas trwania lub dopasować określony filtr nazw. Aby szybko usunąć wiele artefaktów, w tym artykule przedstawiono acr purge
polecenie, które można uruchomić jako zadanie usługi ACR na żądanie lub zaplanowane .
Polecenie acr purge
jest obecnie dystrybuowane w publicznym obrazie kontenera (mcr.microsoft.com/acr/acr-cli:0.5
), utworzonym na podstawie kodu źródłowego w repozytorium acr-cli w usłudze GitHub. acr purge
jest obecnie w wersji zapoznawczej.
Aby uruchomić przykłady zadań usługi ACR w tym artykule, możesz użyć usługi Azure Cloud Shell lub lokalnej instalacji interfejsu wiersza polecenia platformy Azure. Jeśli chcesz używać go lokalnie, wymagana jest wersja 2.0.76 lub nowsza. Uruchom polecenie az --version
, aby dowiedzieć się, jaka wersja jest używana. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.
Ostrzeżenie
acr purge
Użyj polecenia z danymi obrazów usuniętymi przestrogą jest NIE DO ODZYSKANIA. Jeśli masz systemy ściągające obrazy za pomocą skrótu manifestu (w przeciwieństwie do nazwy obrazu), nie należy czyścić nieotagowanych obrazów. Usunięcie nieotagowanych obrazów uniemożliwi tym systemom ściąganie obrazów z rejestru. Zamiast ściągać za pomocą manifestu, rozważ wdrożenie unikatowego schematu tagowania , zalecanego najlepszego rozwiązania.
Jeśli chcesz usunąć tagi pojedynczego obrazu lub manifesty przy użyciu poleceń interfejsu wiersza polecenia platformy Azure, zobacz Usuwanie obrazów kontenerów w usłudze Azure Container Registry.
Użyj polecenia przeczyszczania
Polecenie acr purge
kontenera usuwa obrazy według tagu w repozytorium, które pasuje do filtru nazw i które są starsze niż określony czas trwania. Domyślnie usuwane są tylko odwołania do tagów, a nie podstawowe manifesty i dane warstw. Polecenie ma również możliwość usunięcia manifestów.
Uwaga
acr purge
nie usuwa tagu obrazu ani repozytorium, w którym write-enabled
atrybut jest ustawiony na false
. Aby uzyskać informacje, zobacz Blokowanie obrazu kontenera w rejestrze kontenerów platformy Azure.
acr purge
program jest przeznaczony do uruchamiania jako polecenia kontenera w zadaniu usługi ACR, dzięki czemu uwierzytelnia się automatycznie w rejestrze, w którym zadanie jest uruchamiane i wykonuje tam akcje. Przykłady zadań w tym artykule używają aliasu acr purge
polecenia zamiast w pełni kwalifikowanego polecenia obrazu kontenera.
Ważne
- Standardowe polecenie do wykonania polecenia
acr purge
toaz acr run --registry <YOUR_REGISTRY> --cmd 'acr purge --optional parameter' /dev/null
. - Zalecamy uruchomienie kompletnego
acr purge
polecenia w celu użycia przeczyszczania usługi ACR. Na przykład uruchom polecenieacr purge --help
jakoaz acr run --registry <YOUR_REGISTRY> --cmd 'acr purge --help' /dev/null
.
Po uruchomieniu programu określ co najmniej następujące elementy acr purge
:
--filter
— Wyrażenie regularne nazwy repozytorium i wyrażenie regularne nazwy tagu do filtrowania obrazów w rejestrze. Przykłady:--filter "hello-world:.*"
pasuje do wszystkich tagów whello-world
repozytorium,--filter "hello-world:^1.*"
pasuje do tagów rozpoczynających się od1
whello-world
repozytorium i--filter ".*/cache:.*"
pasuje do wszystkich tagów w repozytoriach kończących się na ./cache
Można również przekazać wiele--filter
parametrów.--ago
- Ciąg czasu trwania w stylu języka Go wskazujący czas trwania poza tym, które obrazy są usuwane. Czas trwania składa się z sekwencji co najmniej jednej liczby dziesiętnej, z których każdy ma sufiks jednostkowy. Prawidłowe jednostki czasu obejmują wartość "d" dla dni, "h" dla godzin i "m" w ciągu kilku minut. Na przykład--ago 2d3h6m
wybiera wszystkie przefiltrowane obrazy ostatnio zmodyfikowane ponad dwa dni, 3 godziny i 6 minut temu, a--ago 1.5h
następnie wybiera obrazy ostatnio zmodyfikowane ponad 1,5 godziny temu.
acr purge
obsługuje kilka parametrów opcjonalnych. Poniższe dwa elementy są używane w przykładach w tym artykule:
--untagged
- Określa, że wszystkie manifesty, które nie mają skojarzonych tagów (manifesty bez tagów) są usuwane. Ten parametr usuwa również nieotagowane manifesty oprócz tagów, które są już usuwane. Usuń wszystkie tagi skojarzone z manifestem, aby go przeczyścić; tylko wtedy można przeczyścić dowolny manifest tagu przy użyciu polecenia--untagged
.--dry-run
- Określa, że żadne dane nie są usuwane, ale dane wyjściowe są takie same, jak w przypadku uruchomienia polecenia bez tej flagi. Ten parametr jest przydatny do testowania polecenia przeczyszczania, aby upewnić się, że nie przypadkowo usuwa danych, które mają zostać zachowane.--keep
- Określa, że są zachowywane najnowsze x liczby tagów do usunięcia. Najnowsze tagi są określane przez czas ostatniej modyfikacji tagu.--concurrency
- Określa liczbę zadań przeczyszczania do przetwarzania współbieżnego. Wartość domyślna jest używana, jeśli nie podano tego parametru.
Uwaga
Filtr --untagged
nie odpowiada na --ago
filtr.
Aby uzyskać dodatkowe parametry, uruchom polecenie acr purge --help
.
acr purge
obsługuje inne funkcje poleceń usługi ACR Tasks, w tym zmienne uruchamiania i dzienniki uruchamiania zadań, które są przesyłane strumieniowo, a także zapisywane na potrzeby późniejszego pobierania.
Uruchamianie w zadaniu na żądanie
W poniższym przykładzie użyto polecenia az acr run , aby uruchomić acr purge
polecenie na żądanie. W tym przykładzie usunięto wszystkie tagi obrazów i manifesty w hello-world
repozytorium myregistry, które zostały zmodyfikowane ponad 1 dzień temu i wszystkie nieotagowane manifesty. Polecenie kontenera jest przekazywane przy użyciu zmiennej środowiskowej. Zadanie jest uruchamiane bez kontekstu źródłowego.
# 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
Uruchamianie w zaplanowanym zadaniu
W poniższym przykładzie użyto polecenia az acr task create , aby utworzyć codzienne zaplanowane zadanie usługi ACR. Tagi przeczyszczania zadań zmodyfikowały się ponad 7 dni temu w hello-world
repozytorium. Polecenie kontenera jest przekazywane przy użyciu zmiennej środowiskowej. Zadanie jest uruchamiane bez kontekstu źródłowego.
# 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
Uruchom polecenie az acr task show, aby zobaczyć, że wyzwalacz czasomierza jest skonfigurowany.
Przeczyszczanie dużej liczby tagów i manifestów
Przeczyszczanie dużej liczby tagów i manifestów może potrwać kilka minut lub dłużej. Aby przeczyścić tysiące tagów i manifestów, może być konieczne uruchomienie polecenia dłużej niż domyślny limit czasu 600 sekund dla zadania na żądanie lub 3600 sekund dla zaplanowanego zadania. Jeśli przekroczono limit czasu, usuwany jest tylko podzbiór tagów i manifestów. Aby upewnić się, że przeczyszczenie na dużą skalę zostało ukończone, przekaż --timeout
parametr , aby zwiększyć wartość.
Na przykład następujące zadanie na żądanie ustawia limit czasu 3600 sekund (1 godzinę):
# 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
Przykład: Zaplanowane przeczyszczenie wielu repozytoriów w rejestrze
W tym przykładzie przedstawiono sposób użycia do acr purge
okresowego czyszczenia wielu repozytoriów w rejestrze. Na przykład może istnieć potok programowania, który wypycha obrazy do samples/devimage1
repozytoriów i samples/devimage2
. Obrazy programistyczne są okresowo importowane do repozytorium produkcyjnego dla wdrożeń, więc nie potrzebujesz już obrazów programistycznych. Co tydzień przeczyścisz samples/devimage1
repozytoria i samples/devimage2
w ramach przygotowań do pracy w nadchodzącym tygodniu.
Podgląd przeczyszczania
Przed usunięciem danych zalecamy uruchomienie zadania przeczyszczania na żądanie przy użyciu parametru --dry-run
. Ta opcja umożliwia wyświetlenie tagów i manifestów, które polecenie przeczyści bez usuwania żadnych danych.
W poniższym przykładzie filtr w każdym repozytorium wybiera wszystkie tagi. Parametr --ago 0d
pasuje do obrazów w każdym wieku w repozytoriach, które pasują do filtrów. Zmodyfikuj kryteria wyboru zgodnie z potrzebami dla danego scenariusza. Parametr --untagged
wskazuje, aby usuwać manifesty oprócz tagów. Polecenie kontenera jest przekazywane do polecenia az acr run przy użyciu zmiennej środowiskowej.
# 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
Przejrzyj dane wyjściowe polecenia, aby wyświetlić tagi i manifesty zgodne z parametrami wyboru. Ponieważ polecenie jest uruchamiane z poleceniem --dry-run
, żadne dane nie są usuwane.
Przykładowe dane wyjściowe:
[...]
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
[...]
Planowanie przeczyszczania
Po zweryfikowaniu przebiegu suchego utwórz zaplanowane zadanie w celu zautomatyzowania przeczyszczania. W poniższym przykładzie zaplanowano tygodniowe zadanie w niedzielę o godzinie 1:00 UTC, aby uruchomić poprzednie polecenie przeczyszczania:
# 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
Uruchom polecenie az acr task show, aby zobaczyć, że wyzwalacz czasomierza jest skonfigurowany.
Następne kroki
Dowiedz się więcej o innych opcjach usuwania danych obrazów w usłudze Azure Container Registry.
Aby uzyskać więcej informacji na temat magazynu obrazów, zobacz Magazyn obrazów kontenerów w usłudze Azure Container Registry.