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

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

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

Příklady úloh ACR v tomto článku můžete spustit pomocí azure Cloud Shell nebo místní instalace 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.

Upozornění

acr purge Použijte příkaz s opatrností – odstraněná data obrázku nejsou obnovitelná. Pokud máte systémy, které načítá image podle hodnoty manifestu digest (na rozdíl od názvu obrázku), neměli byste nevymazat neznačené image. Odstraněním neznačkovaných imagí zabráníte těmto systémům v načítání imagí z vašeho registru. Místo stahování podle manifestu zvažte přijetí jedinečného schématu označování, které je doporučeným osvědčeným postupem.

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

Použití příkazu pro vymazání

Příkaz acr purge kontejneru odstraní obrázky podle značky v úložišti, které odpovídají filtru názvů a jsou starší než zadaná doba trvání. Ve výchozím nastavení se odstraňují jenom 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 obrázku nebo úložiště, kde write-enabled je atribut nastaven na falsehodnotu . Informace najdete v tématu Uzamčení image kontejneru v registru kontejneru Azure.

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

Důležité

  • Standardní příkaz pro spuštění 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. Spusťte například příkaz acr purge --help jako az acr run --registry <YOUR_REGISTRY> --cmd 'acr purge --help' /dev/null.

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

  • --filterRegulá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:.*" porovná všechny značky v hello-world úložišti, --filter "hello-world:^1.*" porovná značky začínající 1 na v hello-world úložišti a --filter ".*/cache:.*" všechny značky v úložištích končící na /cache. Můžete také předat více --filter parametrů.
  • --agoŘetězec doby trvání ve stylu Go, který označuje dobu, 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. Vybere například všechny filtrované obrázky naposledy --ago 2d3h6m změněné před více než dvěma dny, 3 hodinami a 6 minutami a --ago 1.5h vybere obrázky naposledy upravené před více než 1,5 hodinami.

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

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

Poznámka

Filtr --untagged na filtr nereaguje --ago . Pro další parametry spusťte příkaz acr purge --help.

acr purge podporuje další funkce příkazů ACR Tasks, včetně proměnných spuštění a protokolů spuštění úloh , které se streamují a také ukládají 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 image značky a manifesty v hello-world úložišti v myregistry , které byly změněny před více než 1 dny, a všechny manifesty bez značky. Příkaz kontejneru se předává 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í denní naplánované úlohy ACR. Úkol vyprázdní značky upravené před více než 7 dny v úložišti hello-world . Příkaz kontejneru se předává 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 zkontrolujte, že je nakonfigurovaný trigger časovače.

Vymazá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 i déle. Pokud chcete vymazat 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ánovanou úlohu. 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 pro zvýšení hodnoty.

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

# 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 pomocí acr purge pravidelného čištění 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 . Vývojové image pro svá nasazení pravidelně importujete do produkčního úložiště, takže už vývojové image nepotřebujete. Každý týden vyprázdníte samples/devimage1 úložiště a samples/devimage2 v rámci přípravy 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 vymazání na vyžádání pomocí parametru --dry-run . Tato možnost umožňuje zobrazit značky a manifesty, které příkaz vyprázdní, bez odebrání jakýchkoli dat.

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, že se mají kromě značek odstranit i manifesty. 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 se příkaz spouští pomocí --dry-runpříkazu , 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í úlohu na neděli v 1:00 UTC, aby se spustil předchozí příkaz vymazá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 zkontrolujte, že je nakonfigurovaný trigger časovače.

Další kroky

Přečtěte si o dalších možnostech odstranění dat obrázků v Azure Container Registry.

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