Udostępnij za pośrednictwem


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 zostać wypełniony obrazami lub innymi artefaktami, które stają się niepotrzebne po krótkim okresie czasu. Możesz usunąć wszystkie tagi starsze niż określony czas trwania lub dopasować określony filtr nazw. Aby szybko usunąć wiele artefaktów, w artykule omówiono acr purge polecenie, które można uruchomić jako zadanie ACR na żądanie lub zaplanowane.

Polecenie acr purge jest obecnie dystrybuowane w publicznym obrazie kontenera (mcr.microsoft.com/acr/acr-cli:0.14), 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

Używaj polecenia acr purge ostrożnie — usunięte dane obrazów są NIE DO ODZYSKANIA. Jeśli masz systemy pobierające obrazy według skrótu manifestu (w przeciwieństwie do nazwy obrazu), nie czyść 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 schematu unikalnego tagowania, zalecanej najlepszej praktyki.

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

Komenda kontenerowa acr purge usuwa obrazy z repozytorium według tagu, które pasują do filtra nazw i są starsze niż określony czas. 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 jest zaprojektowany do uruchamiania jako polecenie kontenera w ACR Task, dzięki czemu automatycznie uwierzytelnia się w rejestrze, gdzie jest uruchamiane zadanie i wykonuje tam działania. Przykłady zadań w tym artykule używają polecenia acr purge 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 pełnego polecenia acr purge, aby skorzystać z funkcji oczyszczania 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 stylu Go wskazujący czas po upływie którego obrazy są usuwane. Czas trwania składa się z sekwencji jednej lub więcej liczb dziesiętnych, z których każda ma sufiks jednostkowy. Prawidłowe jednostki czasu obejmują "d" dla dni, "h" dla godzin i "m" dla 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 usunąć; tylko wtedy można usunąć manifest bez tagów, używając --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ń czyszczenia do jednoczesnego przetwarzania. 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 wykonywania i dzienniki wykonywania zadań, które są przesyłane strumieniowo, a także zapisywane na potrzeby późniejszego pobierania.

Uruchom 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. Zadanie usuwa tagi zmodyfikowane ponad 7 dni temu w repozytorium hello-world. 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 pokazano, jak używać 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 i samples/devimage2 repozytoriów. Okresowo importujesz obrazy rozwojowe do repozytorium produkcyjnego na potrzeby wdrożeń, więc nie potrzebujesz już obrazów rozwojowych. Co tydzień oczyszczasz repozytoria samples/devimage1 i samples/devimage2, przygotowując się do pracy w nadchodzącym tygodniu.

Podgląd usuwania

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
[...]

Zaplanuj usunięcie

Po zweryfikowaniu przebiegu suchego utwórz zaplanowane zadanie w celu zautomatyzowania przeczyszczania. W poniższym przykładzie zaplanowano cotygodniowe zadanie na niedzielę o godzinie 1:00 UTC, aby wykonać wcześniejsze polecenie oczyszczania.

# 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 przechowywania obrazów, zobacz Przechowywanie obrazów kontenerów w usłudze Azure Container Registry.