Odstranění imagí kontejneru ve službě Azure Container Registry

Pokud chcete zachovat velikost registru kontejneru Azure, 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ější úložiště, jiné se obvykle dají rychleji odstranit. Například v automatizovaném scénáři sestavení a testování může registr rychle vyplnit image, které se nemusí nasazovat, a může být vyprázdněno krátce po dokončení sestavení a testovacího úspěšného dokončení.

Vzhledem k tomu, že data obrázků můžete odstranit několika různými způsoby, je důležité pochopit, jak každá operace odstranění ovlivňuje využití úložiště. Tento článek popisuje několik metod odstranění dat obrázků:

  • Odstranění úložiště: Odstraní všechny image a všechny jedinečné vrstvy v úložišti.
  • 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 obrázku.
  • Odstranit podle hodnoty hash manifestu: Odstraní image, všechny jedinečné vrstvy odkazované na obrázek a všechny značky přidružené k obrázku.

Úvod k těmto konceptům najdete v tématu O registrech, úložištích a imagích.

Poznámka

Po odstranění dat obrázků Azure Container Registry okamžitě zastaví fakturaci pro přidružené úložiště. Registr ale obnoví přidružený prostor úložiště pomocí asynchronního procesu. Než registr vyčistí vrstvy a zobrazí aktualizované využití úložiště, nějakou dobu trvá.

Odstranění úložiště

Odstraněním úložiště se odstraní všechny image v úložišti, včetně všech značek, jedinečných vrstev a manifestů. Když odstraníte ú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 Azure CLI odstraní úložiště acr-helloworld a všechny značky a manifesty v úložišti. Pokud na vrstvy odkazované odstraněnými manifesty neodkazují žádné jiné image v registru, odstraní se také jejich data vrstvy a obnoví prostor úložiště.

 az acr repository delete --name myregistry --repository acr-helloworld

Odstranit podle značky

Jednotlivé image z úložiště můžete 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ý všemi jedinečnými vrstvami v imagi (vrstvy, které nesdílí žádné jiné image v registru).

Pokud chcete odstranit podle značky, použijte příkaz az acr repository delete a zadejte název image v parametru --image . Všechny vrstvy jedinečné pro obrázek a všechny ostatní značky přidružené k obrázku se odstraní.

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í podle značky 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. Při zrušení značky image se neumožní žádné místo, protože jeho manifest a data vrstvy zůstanou v registru. Odstraní se pouze samotný odkaz na značku.

Odstranit podle hash manifestu

Hodnota hash manifestu může být přidružená k jedné, žádné nebo více značek. Když odstraníte hodnotou hash, odstraní se všechny značky odkazované manifestem, stejně jako data vrstev pro všechny vrstvy jedinečné pro obrázek. Sdílená data vrstvy se neodstraní.

Pokud chcete odstranit hodnotou hash, nejprve vypíšete přehledy manifestu úložiště obsahujícího image, které chcete odstranit. Příklad:

az acr manifest list-metadata --name acr-helloworld --registry myregistry
[
  {
    "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 zadejte hodnotu hash, kterou chcete odstranit, v příkazu az acr repository delete . 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 acr-helloworld:v2 se odstraní z registru, stejně jako všechna data vrstvy jedinečná pro danou image. Pokud je manifest přidružený k více značek, odstraní se také všechny přidružené značky.

Odstranění digestů podle časového razítka

Pokud chcete zachovat velikost úložiště nebo registru, možná budete muset pravidelně odstraňovat hodnoty hash manifestu starší než určité datum.

Následující příkaz Azure CLI vypíše všechny algoritmy hash manifestu v úložišti starším než zadané časové razítko ve vzestupném pořadí. Nahraďte <acrName> hodnoty <repositoryName> vhodné pro vaše prostředí a nahraďte je hodnotami. Časové razítko může být výraz plným datem a časem nebo datem, jako v tomto příkladu.

az acr manifest list-metadata --name <repositoryName> --registry <acrName> <repositoryName> \
    --orderby time_asc -o tsv --query "[?timestamp < '2019-04-05'].[digest, timestamp]"

Po identifikaci zastaralých hodnot hash manifestu můžete spustit následující skript Bash pro odstranění hodnot hash manifestu starších než zadané časové razítko. Vyžaduje Azure CLI a xargs. Ve výchozím nastavení skript neprovádí žádné odstranění. ENABLE_DELETE Změňte hodnotu tak, aby true se povolilo odstranění obrázku.

Upozornění

Pomocí následujícího ukázkového skriptu s upozorněním odstraněnými daty obrázků je NEDOSTUPNÉ. Pokud máte systémy, které načítá image hodnotou hash manifestu (na rozdíl od názvu image), neměli byste tyto skripty spouštět. Odstraněním hodnoty hash manifestu zabráníte těmto systémům v načítání imagí z registru. Místo stažení manifestu zvažte přijetí jedinečného schématu označování, doporučené osvědčené postupy.

#!/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 manifest list-metadata --name $REPOSITORY --registry $REGISTRY \
    --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 manifest list-metadata --name $REPOSITORY --repository $REGISTRY \
   --orderby time_asc --query "[?timestamp < '$TIMESTAMP'].[digest, timestamp]" -o tsv
fi

Odstranění nezoznaných obrázků

Jak je uvedeno v části Manifest digest , nasdílení upraveného obrázku pomocí existující značky zruší označení dříve nasdílené image, což vede k osamocené (nebo "dangling") image. Dříve nasdílený manifest image a jeho data vrstvy zůstávají v registru. Zvažte následující posloupnost událostí:

  1. Nasdílení obrázku acr-helloworld s nejnovější značkou: docker push myregistry.azurecr.io/acr-helloworld:latest

  2. Zkontrolujte manifesty úložiště acr-helloworld:

    az acr manifest list-metadata --name acr-helloworld --registry myregistry
    
    
    [
      {
        "digest": "sha256:d2bdc0c22d78cde155f53b4092111d7e13fe28ebf87a945f94b19c248000ceec",
        "tags": [
          "latest"
        ],
        "timestamp": "2018-07-11T21:32:21.1400513Z"
      }
    ]
    
  3. Úprava souboru acr-helloworld Dockerfile

  4. Nasdílení obrázku acr-helloworld s nejnovější značkou: docker push myregistry.azurecr.io/acr-helloworld:latest

  5. Zkontrolujte manifesty úložiště acr-helloworld:

    az acr manifest list-metadata --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 posloupnosti, je nyní osamocený manifest, jehož "tags" vlastnost je prázdný seznam. Tento manifest stále existuje v registru spolu s libovolnými jedinečnými daty vrstvy, na která odkazuje. Pokud chcete tyto osamocené obrázky a jejich data vrstvy odstranit, musíte je odstranit hodnotou hash manifestu.

Automatické vyprázdně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 vrstvy:

  • Vytvořte úlohu ACR, která spustí příkaz kontejneru acr purge a odstraní všechny značky starší než určitou dobu trvání nebo odpovídají zadanému filtru názvů. Volitelně můžete nakonfigurovat acr purge odstranění nezoznačené manifesty.

    Příkaz kontejneru acr purge 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, aby se spravovaly nezoznačené manifesty. Když povolíte zásady uchovávání informací, image manifesty v registru, které nemají přidružené značky, a podkladová data vrstvy se po nastaveném období automaticky odstraní.

    Zásady uchovávání informací jsou aktuálně funkcí preview Premium registrů kontejnerů. Zásady uchovávání informací se vztahují pouze na neoznačené manifesty vytvořené poté, co se zásada projeví.

Další kroky

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