Odstranění imagí kontejneru ve službě Azure Container Registry
Pokud chcete zachovat velikost služby Azure Container Registry, měli byste pravidelně odstraňovat zastaralá data imagí. I když některé image kontejnerů nasazené do produkčního prostředí můžou vyžadovat dlouhodobé ukládání, můžou se obvykle odstranit i další. Například ve scénáři automatizovaného sestavení a testování může registr rychle vyplnit image, které nikdy nebudou nasazeny, a lze je vymazat krátce po dokončení sestavení a průchodu testu.
Vzhledem k tomu, že je možné odstranit obrazová data několika různými způsoby, je důležité pochopit, jak jednotlivé operace odstranění ovlivňují využití úložiště. Tento článek se věnuje několika metodám odstraňování dat imagí:
- Odstranění úložiště: odstraní všechny image a všechny jedinečné vrstvy v rámci úložiště.
- Odstranit podle značky: odstraní obrázek, značku, všechny jedinečné vrstvy, na které obrázek odkazuje, a všechny ostatní značky přidružené k imagi.
- Odstranit manifest Digest: odstraní obrázek, všechny jedinečné vrstvy, na které odkazuje obrázek, a všechny značky přidružené k imagi.
Úvod do těchto konceptů najdete v tématu o registrech, úložištích a obrázcích.
Poznámka
Po odstranění dat obrázku Azure Container Registry zastaví hned za přidružené úložiště. Registr však obnoví přidružený prostor úložiště pomocí asynchronního procesu. V případě, že registr vyčistí vrstvy a ukazuje aktualizované využití úložiště, trvá to nějakou dobu.
Odstranit úložiště
Odstraněním úložiště dojde k odstranění všech imagí v úložišti, včetně všech značek, jedinečných vrstev a manifestů. Při odstraňování úložiště obnovíte prostor úložiště používaný obrázky, které odkazují na jedinečné vrstvy v daném úložišti.
Následující příkaz rozhraní příkazového řádku Azure odstraní úložiště "ACR-HelloWorld" a všechny značky a manifesty v rámci úložiště. Pokud na vrstvy, na které odkazují odstraněné manifesty, nejsou odkazovány jinými imagemi v registru, odstraní se také data jejich vrstev a tím se obnoví prostor úložiště.
az acr repository delete --name myregistry --repository acr-helloworld
Odstranit podle značky
Jednotlivé image můžete z úložiště odstranit zadáním názvu úložiště a značky v operaci odstranění. Když odstraníte podle značky, obnovíte prostor úložiště používaný jakoukoli jedinečnou vrstvou v imagi (vrstvy, které nejsou sdíleny jinými imagemi v registru).
K odstranění podle značky použijte příkaz az acr repository delete a v parametru zadejte název --image image. Odstraní se všechny vrstvy, které jsou pro obrázek jedinečné, a všechny ostatní značky přidružené k imu.
Například odstranění image "acr-helloworld:latest" z registru "myregistry":
az acr repository delete --name myregistry --image acr-helloworld:latest
This operation will delete the manifest 'sha256:0a2e01852872580b2c2fea9380ff8d7b637d3928783c55beb3f21a6e58d5d108' and all the following images: 'acr-helloworld:latest', 'acr-helloworld:v3'.
Are you sure you want to continue? (y/n):
Tip
Odstranění značkou by nemělo být zaměňováno s odstraněním značky (zrušení značky). Značku můžete odstranit pomocí příkazu Azure CLI az acr repository untag. Když image odznačíte, není volné žádné místo, protože jeho manifest a data vrstvy zůstanou v registru. Odstraní se pouze samotný odkaz na značku.
Odstranění hodnotou hash manifestu
K jedné, žádné nebo více značce může být přidružena hodnota hash manifestu. Když odstraníte soubor digest, odstraní se všechny značky, na které manifest odkazuje, stejně jako data vrstev pro všechny vrstvy jedinečné pro obrázek. Data sdílené vrstvy se odstraní.
Pokud chcete odstranit obsah podle hodnot hash, nejprve vy list manifest digests for the repository containing the images you wish to delete (Seznam hodnot hash manifestu pro úložiště obsahující image, které chcete odstranit). Například:
az acr repository show-manifests --name myregistry --repository acr-helloworld
[
{
"digest": "sha256:0a2e01852872580b2c2fea9380ff8d7b637d3928783c55beb3f21a6e58d5d108",
"tags": [
"latest",
"v3"
],
"timestamp": "2018-07-12T15:52:00.2075864Z"
},
{
"digest": "sha256:3168a21b98836dda7eb7a846b3d735286e09a32b0aa2401773da518e7eba3b57",
"tags": [
"v2"
],
"timestamp": "2018-07-12T15:50:53.5372468Z"
}
]
Dále v příkazu az acr repository delete zadejte hodnotu hash, kterou chcete odstranit. Příkaz má tento formát:
az acr repository delete --name <acrName> --image <repositoryName>@<digest>
Pokud například chcete odstranit poslední manifest uvedený v předchozím výstupu (se značkou "v2"):
az acr repository delete --name myregistry --image acr-helloworld@sha256:3168a21b98836dda7eb7a846b3d735286e09a32b0aa2401773da518e7eba3b57
This operation will delete the manifest 'sha256:3168a21b98836dda7eb7a846b3d735286e09a32b0aa2401773da518e7eba3b57' and all the following images: 'acr-helloworld:v2'.
Are you sure you want to continue? (y/n):
Image se odstraní z registru, stejně jako jakákoli data vrstvy acr-helloworld:v2 jedinečná pro tento obrázek. Pokud je manifest přidružený k více značkách, odstraní se také všechny přidružené značky.
Odstranění hodnot hash podle časového razítka
Pokud chcete zachovat velikost úložiště nebo registru, možná budete muset pravidelně odstraňovat hodnoty hash manifestu, které jsou starší než určité datum.
Následující příkaz Azure CLI zobrazí seznam všech hodnot hash manifestu v úložišti, které je starší než zadané časové razítko ve vzestupném pořadí. Nahraďte <acrName> <repositoryName> a hodnotami odpovídajícími vašemu prostředí. Časové razítko může být úplný výraz data a času nebo datum jako v tomto příkladu.
az acr repository show-manifests --name <acrName> --repository <repositoryName> \
--orderby time_asc -o tsv --query "[?timestamp < '2019-04-05'].[digest, timestamp]"
Po identifikaci zastaralých hodnot hash manifestu můžete spuštěním následujícího skriptu Bash odstranit hodnoty hash manifestu starší než zadané časové razítko. Vyžaduje Rozhraní příkazového řádku Azure a xargs. Ve výchozím nastavení skript provede žádné odstranění. Pokud chcete ENABLE_DELETE povolit odstranění true image, změňte hodnotu na .
Upozornění
Následující ukázkový skript používejte obezřetně – odstraněná data obrázků jsou NEOPRAVITELNÁ. Pokud máte systémy, které přetahují image podle hodnot hash manifestu (na rozdíl od názvu image), neměli byste tyto skripty spouštět. Odstraněním hodnot hash manifestu zabráníte, aby tyto systémy natahoval image z vašeho registru. Místo vyžadování manifestem zvažte použití jedinečného schématu označování, doporučeného osvědčeného postupu.
#!/bin/bash
# WARNING! This script deletes data!
# Run only if you do not have systems
# that pull images via manifest digest.
# Change to 'true' to enable image delete
ENABLE_DELETE=false
# Modify for your environment
# TIMESTAMP can be a date-time string such as 2019-03-15T17:55:00.
REGISTRY=myregistry
REPOSITORY=myrepository
TIMESTAMP=2019-04-05
# Delete all images older than specified timestamp.
if [ "$ENABLE_DELETE" = true ]
then
az acr repository show-manifests --name $REGISTRY --repository $REPOSITORY \
--orderby time_asc --query "[?timestamp < '$TIMESTAMP'].digest" -o tsv \
| xargs -I% az acr repository delete --name $REGISTRY --image $REPOSITORY@% --yes
else
echo "No data deleted."
echo "Set ENABLE_DELETE=true to enable deletion of these images in $REPOSITORY:"
az acr repository show-manifests --name $REGISTRY --repository $REPOSITORY \
--orderby time_asc --query "[?timestamp < '$TIMESTAMP'].[digest, timestamp]" -o tsv
fi
Odstranění neotáhlých imagí
Jak je uvedeno v části Přehled manifestu, při nahazování změněné image pomocí existující značky se odznačí dříve nadaná image, což vede k osamocené (neboli neprovážené) ibitové kopii. Manifest dříve na push image (a data její vrstvy) zůstává v registru. Zvažte následující posloupnost událostí:
Na push image acr-helloworld se značkou latest:
docker push myregistry.azurecr.io/acr-helloworld:latestZkontrolujte manifesty pro úložiště acr-helloworld:
az acr repository show-manifests --name myregistry --repository acr-helloworld[ { "digest": "sha256:d2bdc0c22d78cde155f53b4092111d7e13fe28ebf87a945f94b19c248000ceec", "tags": [ "latest" ], "timestamp": "2018-07-11T21:32:21.1400513Z" } ]Úprava souboru Dockerfile acr-helloworld
Na push image acr-helloworld se značkou latest:
docker push myregistry.azurecr.io/acr-helloworld:latestZkontrolujte manifesty pro úložiště acr-helloworld:
az acr repository show-manifests --name myregistry --repository acr-helloworld[ { "digest": "sha256:7ca0e0ae50c95155dbb0e380f37d7471e98d2232ed9e31eece9f9fb9078f2728", "tags": [ "latest" ], "timestamp": "2018-07-11T21:38:35.9170967Z" }, { "digest": "sha256:d2bdc0c22d78cde155f53b4092111d7e13fe28ebf87a945f94b19c248000ceec", "tags": [], "timestamp": "2018-07-11T21:32:21.1400513Z" } ]
Jak vidíte ve výstupu posledního kroku v sekvenci, existuje teď osamocené manifesty, jejichž "tags" vlastností je prázdný seznam. Tento manifest stále existuje v registru spolu s jedinečnými daty vrstev, na která odkazuje. Pokud chcete tyto osamocené image a data jejich vrstev odstranit, musíte odstranit pomocí hodnoty hash manifestu.
Automatické vymazání značek a manifestů
Azure Container Registry poskytuje následující automatizované metody pro odebrání značek a manifestů a jejich přidružených jedinečných dat vrstev:
Vytvořte úlohu ACR, která spustí příkaz kontejneru, aby se odstranily všechny značky, které jsou starší než určitá doba trvání nebo odpovídají
acr purgezadanému filtru názvů. Volitelně můžeteacr purgenakonfigurovat, aby se odstranily neotivněné manifesty.Příkaz
acr purgekontejneru je aktuálně ve verzi Preview. Další informace najdete v tématu Automatické vymazání imagí z registru kontejneru Azure.Volitelně můžete nastavit zásady uchovávání informací pro každý registr pro správu neotečených manifestů. Když povolíte zásady uchovávání informací, manifesty image v registru, které nemají přidružené značky, a data podkladové vrstvy se po nastaveném období automaticky odstraní.
Zásady uchovávání informací jsou v současné době funkcí registrů kontejnerů Premium ve verzi Preview. Zásady uchovávání informací se vztahují pouze na neotevřené manifesty vytvořené po jejich použití.
Další kroky
Další informace o úložišti obrázků v Azure Container Registry najdete v tématu Kontejnerové úložiště iimage v Azure Container Registry .