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 ve scénáři automatizovaného sestavení a testování může váš registr rychle vyplnit image, které se nemusí nasadit, a může být krátce po dokončení sestavení a testu úspěšně vyprázdněno.

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 odstraňování dat obrázků:

  • 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 odkazované na obrázek a všechny ostatní značky přidružené k obrázku.
  • Odstranit hodnotou hash manifestu: Odstraní image, všechny jedinečné vrstvy odkazované na image 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 image azure Container Registry okamžitě zastaví fakturaci přidruženého úložiště. Registr však 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ě odstraníte 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 a značky úložiště v operaci odstranění. Když odstraníte značkou, obnovíte prostor úložiště používaný všemi jedinečnými vrstvami v imagi (vrstvy nesdílené jinými imagemi v registru).

Pokud chcete odstranit podle značky, použijte příkaz az acr repository delete a v parametru --image zadejte název image. Všechny vrstvy jedinečné pro obrázek a všechny další 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í 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ž zrušíte označení image, nezbývají se žádné místo, protože jeho manifest a data vrstvy zůstanou v registru. Odstraní se pouze samotný odkaz na značku.

Odstranění podle přehledu 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 jakákoli data vrstvy jedinečná pro tuto 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, budete možná muset pravidelně odstraňovat hodnoty hash manifestu starší než určité datum.

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

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

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.

Upozorňující

Při použití následujícího ukázkového skriptu s upozorněním odstraněnými daty obrázků nelze obnovit. Pokud máte systémy, které načítá obrázky hodnotou hash manifestu (na rozdíl od názvu image), neměli byste tyto skripty spouštět. Odstraněním přehledů manifestu 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.

#!/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 "[?lastUpdateTime < '$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 --registry $REGISTRY \
   --orderby time_asc --query "[?lastUpdateTime < '$TIMESTAMP'].[digest, lastUpdateTime]" -o tsv
fi

Odstranění neoznačené image

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

  1. Nasdílení image 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 Dockerfile acr-helloworld

  4. Nasdílení image 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 acr-helloworld --registry myregistry
    
    [
      {
     "architecture": "amd64",
     "changeableAttributes": {
       "deleteEnabled": true,
       "listEnabled": true,
       "quarantineDetails": "{\"state\":\"Scan Passed\",\"link\":\"https://aka.ms/test\",\"scanner\":\"Azure Security Monitoring-Qualys Scanner\",\"result\":{\"version\":\"2020-05-13T00:23:31.954Z\",\"summary\":[{\"severity\":\"High\",\"count\":2},{\"severity\":\"Medium\",\"count\":0},{\"severity\":\"Low\",\"count\":0}]}}",
       "quarantineState": "Passed",
       "readEnabled": true,
       "writeEnabled": true
     },
     "configMediaType": "application/vnd.docker.container.image.v1+json",
     "createdTime": "2020-05-16T04:25:14.3112885Z",
     "digest": "sha256:eef2ef471f9f9d01fd2ed81bd2492ddcbc0f281b0a6e4edb700fbf9025448388",
     "imageSize": 22906605,
     "lastUpdateTime": "2020-05-16T04:25:14.3112885Z",
     "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
     "os": "linux",
     "timestamp": "2020-05-16T04:25:14.3112885Z"
      }
    ]
    

Pole značek se odebere z metadatných dat, když obrázek není označený. 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é 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 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í neoznač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 pro každý registr nastavit zásadu uchovávání informací, abyste mohli spravovat neoznač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 registrů kontejnerů Premium . 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í ve službě Azure Container Registry najdete v tématu Úložiště imagí kontejnerů ve službě Azure Container Registry.