Automatyczne przeczyszczanie obrazów z rejestru kontenerów platformy Azure

W przypadku korzystania z rejestru kontenerów platformy Azure w ramach przepływu pracy deweloperskiego 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 go używać 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ętych przestrogą jest NIE DO ODZYSKANIA. Jeśli masz systemy ściągające obrazy według skrótu manifestu (w przeciwieństwie do nazwy obrazu), nie należy czyścić nieoznakowanych obrazów. Usunięcie nieotagowanych obrazów uniemożliwi tym systemom ściąganie obrazów z rejestru. Zamiast ściągać przez manifest, rozważ wdrożenie unikatowego schematu tagowania , zalecane najlepsze rozwiązanie.

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 Azure Container Registry.

Użyj polecenia przeczyszczania

acr purge Polecenie 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 tylko odwołania do tagów są usuwane, a nie podstawowe manifesty i dane warstwy. 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 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ą aliasuacr purge polecenia zamiast w pełni kwalifikowanego polecenia obrazu kontenera.

Ważne

  • Standardowe polecenie do wykonania acr purge polecenia to az acr run --registry <YOUR_REGISTRY> --cmd 'acr purge --optional parameter' /dev/null.
  • Zalecamy uruchomienie kompletnego acr purge polecenia, aby użyć usługi ACR Purge. Na przykład uruchom polecenie acr purge --help jako az acr run --registry <YOUR_REGISTRY> --cmd 'acr purge --help' /dev/null.

Po uruchomieniu polecenia określ co najmniej następujące elementy acr purge:

  • --filterWyraż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 jednostki. Prawidłowe jednostki czasu obejmują "d" dla dni, "h" przez godziny i "m" przez minuty. 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. Następujące dwa są używane w przykładach w tym artykule:

  • --untagged — Określa, że wszystkie manifesty, które nie mają skojarzonych tagów (nieoznakowanych manifestó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 wtedy, gdy polecenie jest uruchamiane bez tej flagi. Ten parametr jest przydatny do testowania polecenia przeczyszczania, aby upewnić się, że nie przypadkowo usuwa danych, które chcesz zachować.
  • --keep - Określa, że jest zachowywana najnowsza x liczba tagów do usunięcia.
  • --concurrency - Określa liczbę zadań przeczyszczania do przetwarzania współbieżnego. Wartość domyślna jest używana, jeśli ten parametr nie jest podany.

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 do 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 w celu utworzenia codziennego zaplanowanego zadania usługi ACR. Tagi przeczyszczania zadań zostały zmodyfikowane 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, polecenie może wymagać uruchomienia dłuższego 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 acr purge do okresowego czyszczenia wielu repozytoriów w rejestrze. Na przykład możesz mieć 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świetlanie 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 usunąć 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 automatyzowania przeczyszczania. Poniższy przykład planuje cotygodniowe 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 Azure Container Registry.

Aby uzyskać więcej informacji na temat magazynu obrazów, zobacz Magazyn obrazów kontenera w Azure Container Registry.