Automatické vymazání imagí z registru kontejneru Azure

Když jako součást vývojového pracovního postupu použijete registr kontejnerů Azure, může registr rychle vyplnit obrázky nebo jiné artefakty, které nejsou po krátké době potřeba. Můžete chtít odstranit všechny značky starší než určitou dobu trvání nebo odpovídat zadanému filtru názvů. Pokud chcete rychle odstranit více artefaktů, tento článek představuje acr purge příkaz, který můžete spustit jako úlohu ACR na vyžádání nebo naplánovanou úlohu ACR.

Příkaz acr purge se aktuálně distribuuje ve veřejné imagi kontejneru (mcr.microsoft.com/acr/acr-cli:0.5), která je sestavená ze zdrojového kódu v úložišti acr-cli na GitHubu. acr purge je aktuálně ve verzi Preview.

Ke spuštění příkladů úloh ACR v tomto článku můžete použít Azure Cloud Shell nebo místní instalaci Azure CLI. Pokud ho chcete používat místně, vyžaduje se verze 2.0.76 nebo novější. Verzi zjistíte spuštěním příkazu az --version. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.

Upozorňující

acr purge Příkaz použijte s upozorněním – odstraněná data obrázků jsou NEDOSTUPNÁ. Pokud máte systémy, které načítá obrázky hodnotou hash manifestu (na rozdíl od názvu image), neměli byste vyprázdnit neoznačené obrázky. Odstraněním neoznačené image zabráníte těmto systémům v načítání imagí z registru. Místo přijetí manifestu zvažte přijetí jedinečného schématu označování , doporučeného osvědčeného postupu.

Pokud chcete odstranit značky nebo manifesty s jednou imagí pomocí příkazů Azure CLI, přečtěte si téma Odstranění imagí kontejnerů ve službě Azure Container Registry.

Použití příkazu vyprázdnění

Příkaz acr purge kontejneru odstraní obrázky podle značky v úložišti, které odpovídají filtru názvů a které jsou starší než zadaná doba trvání. Ve výchozím nastavení se odstraní pouze odkazy na značky, nikoli podkladové manifesty a data vrstev. Příkaz má také možnost odstranit manifesty.

Poznámka:

acr purge neodstraní značku image nebo úložiště, kde write-enabled je atribut nastaven na false. Informace najdete v tématu Uzamčení image kontejneru v registru kontejneru Azure.

acr purge je navržená tak, aby se v úloze ACR spouštěla jako příkaz kontejneru, aby se automaticky ověřila v registru, ve kterém se úloha spouští, a prováděla tam akce. Příklady úkolů v tomto článku používají acr purge alias příkazu místo plně kvalifikovaného příkazu image kontejneru.

Důležité

  • Standardní příkaz, který se má provést, acr purge je az acr run --registry <YOUR_REGISTRY> --cmd 'acr purge --optional parameter' /dev/null.
  • Pokud chcete použít Vyprázdnění ACR, doporučujeme spustit úplný acr purge příkaz. Například spustit jako acr purge --helpaz acr run --registry <YOUR_REGISTRY> --cmd 'acr purge --help' /dev/null.

Při spuštění acr purgezadejte minimálně následující:

  • --filter– Regulární výraz názvu úložiště a regulární výraz názvu značky pro filtrování obrázků v registru. Příklady: --filter "hello-world:.*" odpovídá všem značkám v hello-world úložišti, --filter "hello-world:^1.*" odpovídá značkám začínajícím 1 v hello-world úložišti a --filter ".*/cache:.*" odpovídá všem značkám v úložištích končících /cache. Můžete také předat více --filter parametrů.
  • --ago– Řetězec doby trvání ve stylu Go označující dobu trvání, po které se obrázky odstraní. Doba trvání se skládá z posloupnosti jednoho nebo více desetinných čísel, z nichž každá má příponu jednotky. Platné časové jednotky zahrnují "d" pro dny, "h" pro hodiny a "m" pro minuty. --ago 2d3h6m Například vybere všechny filtrované obrázky naposledy upravené před dvěma dny, 3 hodinami a 6 minutami a --ago 1.5h vybere obrázky naposledy změněné před 1,5 hodinami.

acr purge podporuje několik volitelných parametrů. V příkladech v tomto článku se používají následující dva:

  • --untagged – Určuje, že se odstraní všechny manifesty, které nemají přidružené značky (neoznačené manifesty). Tento parametr také odstraní neoznačené manifesty kromě značek, které se už odstraňují.
  • --dry-run – Určuje, že se neodstraní žádná data, ale výstup je stejný jako při spuštění příkazu bez tohoto příznaku. Tento parametr je užitečný pro testování příkazu vyprázdnění, abyste měli jistotu, že nechtěně neodstraní data, která chcete zachovat.
  • --keep – Určuje, že se zachová nejnovější x počet značek, které se mají odstranit. Nejnovější značky jsou určeny časem poslední změny značky.
  • --concurrency – Určuje řadu úloh mazání, které se mají zpracovat souběžně. Pokud tento parametr není zadaný, použije se výchozí hodnota.

Poznámka:

Filtr --untagged neodpovídá na --ago filtr. Pro další parametry spusťte acr purge --helppříkaz .

acr purge podporuje další funkce příkazů ACR Tasks, včetně spuštění proměnných a protokolů spuštění úloh, které jsou streamovány a také uloženy pro pozdější načtení.

Spuštění v úloze na vyžádání

Následující příklad používá příkaz az acr run ke spuštění acr purge příkazu na vyžádání. Tento příklad odstraní všechny značky a manifesty obrázků v úložišti v hello-worldmyregistry , které byly změněny před více než 1 dnem a všechny neoznačené manifesty. Příkaz kontejneru se předá pomocí proměnné prostředí. Úloha se spustí bez zdrojového kontextu.

# 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

Spuštění v naplánované úloze

Následující příklad používá příkaz az acr task create k vytvoření každodenní naplánované úlohy ACR. Úloha vyprázdní značky změněné před více než 7 dny v hello-world úložišti. Příkaz kontejneru se předá pomocí proměnné prostředí. Úloha se spustí bez zdrojového kontextu.

# 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

Spuštěním příkazu az acr task show zjistěte, jestli je trigger časovače nakonfigurovaný.

Vyprázdnění velkého počtu značek a manifestů

Vymazání velkého počtu značek a manifestů může trvat několik minut nebo déle. Pokud chcete vyprázdnit tisíce značek a manifestů, může být nutné, aby příkaz běžel déle, než je výchozí časový limit 600 sekund pro úlohu na vyžádání nebo 3600 sekund pro naplánovaný úkol. Pokud dojde k překročení časového limitu, odstraní se pouze podmnožina značek a manifestů. Pokud chcete zajistit dokončení rozsáhlého vyprázdnění, předejte --timeout parametr, aby se hodnota zvýšila.

Například následující úloha na vyžádání nastaví časový limit 3600 sekund (1 hodinu):

# 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

Příklad: Plánované vymazání více úložišť v registru

Tento příklad vás provede pravidelným acr purge čištěním více úložišť v registru. Můžete mít například vývojový kanál, který nasdílí image do samples/devimage1 úložišť a samples/devimage2 úložišť. Vývojové image pravidelně importujete do produkčního úložiště pro vaše nasazení, takže už vývojové image nepotřebujete. Každý týden vyprázdníte samples/devimage1 a samples/devimage2 vyprázdníte úložiště při přípravě na práci v nadcházejícím týdnu.

Náhled vyprázdnění

Před odstraněním dat doporučujeme spustit úlohu mazání na vyžádání pomocí parametru --dry-run . Tato možnost umožňuje zobrazit značky a manifesty, které příkaz vyprázdní, aniž by se odebrala žádná data.

V následujícím příkladu filtr v každém úložišti vybere všechny značky. Parametr --ago 0d odpovídá obrázkům všech věkových kategorií v úložištích, která odpovídají filtrům. Upravte kritéria výběru podle potřeby pro váš scénář. Parametr --untagged označuje odstranění manifestů kromě značek. Příkaz kontejneru se předá příkazu az acr run pomocí proměnné prostředí.

# 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

Zkontrolujte výstup příkazu a zobrazte značky a manifesty, které odpovídají parametrům výběru. Vzhledem k tomu, že příkaz běží s --dry-run, nejsou odstraněna žádná data.

Ukázkový výstup:

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

Naplánování vyprázdnění

Po ověření suchého spuštění vytvořte naplánovanou úlohu pro automatizaci vyprázdnění. Následující příklad naplánuje týdenní úkol v neděli v 1:00 UTC a spustí předchozí příkaz vyprázdnění:

# 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

Spuštěním příkazu az acr task show zjistěte, jestli je trigger časovače nakonfigurovaný.

Další kroky

Seznamte se s dalšími možnostmi odstranění dat imagí ve službě Azure Container Registry.

Další informace o úložišti imagí najdete v tématu Úložiště imagí kontejneru ve službě Azure Container Registry.