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 purgeprogram 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 to az 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 polecenie acr purge --help jako az 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 w hello-world repozytorium, --filter "hello-world:^1.*" pasuje do tagów rozpoczynających się od 1 w hello-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.
  • --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.