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 false
hodnotu . 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 purge
alias příkazu namísto plně kvalifikovaného příkazu image kontejneru.
Důležité
- Standardní příkaz pro spuštění
acr purge
jeaz 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říkazacr purge --help
jakoaz acr run --registry <YOUR_REGISTRY> --cmd 'acr purge --help' /dev/null
.
Při spuštění acr purge
zadejte 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:.*"
porovná všechny značky vhello-world
úložišti,--filter "hello-world:^1.*"
porovná značky začínající1
na vhello-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-run
pří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.