Az Azure Container Registryben található tárolórendszerképek törlése

Az Azure-tárolóregisztrációs adatbázis méretének fenntartása érdekében rendszeresen törölnie kell az elavult rendszerképadatokat. Míg egyes éles környezetben üzembe helyezett tárolólemezképek hosszabb távú tárolást igényelhetnek, mások általában gyorsabban törölhetők. Automatizált buildelési és tesztelési forgatókönyvekben például a beállításjegyzék gyorsan kitöltheti azokat a rendszerképeket, amelyek esetleg soha nem lesznek üzembe helyezve, és röviddel a buildelési és tesztelési folyamat befejezése után törölhetők.

Mivel a rendszerképadatokat többféleképpen is törölheti, fontos tisztában lenni azzal, hogy az egyes törlési műveletek hogyan befolyásolják a tárterület használatát. Ez a cikk a képadatok törlésének számos módszerét ismerteti:

  • Adattár törlése: Törli az adattár összes lemezképét és egyedi rétegét.
  • Törlés címke szerint: Törli a képet, a címkét, a kép által hivatkozott összes egyedi réteget és a képhez társított összes többi címkét.
  • Törlés jegyzékkivonat alapján: Töröl egy képet, a rendszerkép által hivatkozott összes egyedi réteget és a képhez társított összes címkét.

A fogalmak ismertetését a Regisztrációs adatbázisok, adattárak és rendszerképek című témakörben tekinthet meg.

Megjegyzés

A rendszerképadatok törlése után Azure Container Registry azonnal leállítja a társított tárterület számlázását. A beállításjegyzék azonban aszinkron folyamattal helyreállítja a társított tárterületet. Időbe telik, amíg a beállításjegyzék megtisztítja a rétegeket, és megjeleníti a frissített tárterület-használatot.

Adattár törlése

Az adattár törlésével az adattár összes képe törlődik, beleértve az összes címkét, egyedi réteget és jegyzékfájlt. Az adattár törlésekor helyreállítja a lemezképek által használt tárterületet, amely az adattár egyedi rétegeire hivatkozik.

A következő Azure CLI-parancs törli az "acr-helloworld" adattárat, valamint az adattárban található összes címkét és jegyzékfájlt. Ha a törölt jegyzékfájlok által hivatkozott rétegekre nem hivatkoznak a beállításjegyzékben lévő más rendszerképek, akkor a rétegadatok is törlődnek, és helyreállítják a tárterületet.

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

Törlés címke szerint

Az adattárak egyes lemezképeit törölheti az adattár nevének és címkéjének megadásával a törlési műveletben. Ha címke alapján töröl, helyreállítja a lemezkép bármely egyedi rétege által használt tárterületet (a regisztrációs adatbázis más lemezképei által nem megosztott rétegeket).

Címke alapján történő törléshez használja az az acr repository delete parancsot, és adja meg a rendszerkép nevét a --image paraméterben. A rendszer törli a képre egyedi összes réteget és a képhez társított egyéb címkéket.

Például az "acr-helloworld:latest" rendszerkép törlése a "myregistry" beállításjegyzékből:

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):

Tipp

A címke törlése nem tévesztendő össze a címkék törlésével (címkézéssel). A címkét az az acr repository untag Azure CLI-paranccsal törölheti. A rendszerképek leválasztásakor nem szabadít fel szóközt, mert a jegyzékfájl és a réteg adatai a beállításjegyzékben maradnak. A rendszer csak magát a címkehivatkozást törli.

Törlés jegyzékfájl-kivonat alapján

A jegyzék-kivonat egy, egy vagy több címkéhez társítható. Kivonatolással történő törléskor a jegyzékfájl által hivatkozott összes címke törlődik, csakúgy, mint a lemezképen egyedi rétegek rétegadatai. A megosztott réteg adatai nem törlődnek.

Kivonatolással történő törléshez először sorolja fel a törölni kívánt képeket tartalmazó adattár jegyzék-kivonatait. Például:

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"
  }
]

Ezután adja meg a törölni kívánt kivonatot az az acr repository delete paranccsal. A parancs formátuma:

az acr repository delete --name <acrName> --image <repositoryName>@<digest>

Például az előző kimenetben felsorolt utolsó jegyzékfájl törléséhez (a "v2" címkével):

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): 

A acr-helloworld:v2 rendszer törli a rendszerképet a beállításjegyzékből, ahogy az adott lemezképre egyedi rétegadatokat is. Ha egy jegyzékfájl több címkéhez van társítva, az összes társított címke is törlődik.

Kivonatok törlése időbélyeg szerint

Az adattár vagy a beállításjegyzék méretének fenntartásához előfordulhat, hogy egy adott dátumnál régebbi jegyzékkivonatokat kell rendszeresen törölnie.

A következő Azure CLI-parancs növekvő sorrendben listázza egy adott időbélyegnél régebbi adattár összes jegyzék-kivonatát. Cserélje le <acrName> a és <repositoryName> a értéket a környezetének megfelelő értékekre. Az időbélyeg lehet teljes dátum-idő kifejezés vagy dátum, ahogyan ebben a példában is látható.

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

Az elavult jegyzék-kivonatok azonosítása után a következő Bash-szkript futtatásával törölheti a megadott időbélyegnél régebbi jegyzék-kivonatokat. Ehhez az Azure CLI és az xargs szükséges. Alapértelmezés szerint a szkript nem végez törlést. Módosítsa az ENABLE_DELETE értéket a true kép törlésének engedélyezéséhez.

Figyelmeztetés

Használja a következő példaszkriptet óvatossággal – a törölt képadatok nem helyreállíthatók. Ha vannak olyan rendszerei, amelyek jegyzék-kivonat alapján kérnek le képeket (a rendszerkép nevével ellentétben), ne futtassa ezeket a szkripteket. A jegyzék-kivonatok törlése megakadályozza, hogy ezek a rendszerek lekérték a rendszerképeket a beállításjegyzékből. A jegyzékfájl lekérése helyett fontolja meg egy egyedi címkézési séma bevezetését, amely ajánlott eljárás.

#!/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

Nem megjelölt képek törlése

Ahogy a Jegyzékkivonat szakaszban is említettük, a módosított rendszerkép meglévő címkével való leküldése feloldja a korábban leküldéses képet, ami árva (vagy "dangling") képet eredményez. A korábban leküldett rendszerkép jegyzékfájlja – és annak rétegadatai – a beállításjegyzékben maradnak. Vegye figyelembe a következő eseménysorozatot:

  1. Leküldéses kép acr-helloworld címkével a legújabb címkével: docker push myregistry.azurecr.io/acr-helloworld:latest

  2. Ellenőrizze az acr-helloworld adattár jegyzékfájlját:

    az acr manifest list-metadata --name acr-helloworld --registry myregistry
    
    
    [
      {
        "digest": "sha256:d2bdc0c22d78cde155f53b4092111d7e13fe28ebf87a945f94b19c248000ceec",
        "tags": [
          "latest"
        ],
        "timestamp": "2018-07-11T21:32:21.1400513Z"
      }
    ]
    
  3. Acr-helloworld Dockerfile módosítása

  4. Leküldéses kép acr-helloworld címkével a legújabb címkével: docker push myregistry.azurecr.io/acr-helloworld:latest

  5. Ellenőrizze az acr-helloworld adattár jegyzékfájlját:

    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"
      }
    ]
    

A címkék tömbje el lesz távolítva a metaadatokból, ha egy kép nincs címkézve. Ez a jegyzékfájl továbbra is létezik a beállításjegyzékben, valamint az általa hivatkozott egyedi rétegadatokkal együtt. Az ilyen árva képek és azok rétegadatainak törléséhez jegyzék-kivonattal kell törölnie.

Címkék és jegyzékfájlok automatikus törlése

Azure Container Registry a következő automatizált módszereket biztosítja a címkék és jegyzékfájlok eltávolításához, valamint a hozzájuk tartozó egyedi rétegadatokhoz:

  • Hozzon létre egy ACR-feladatot, amely a acr purge tárolóparancsot futtatva törli az adott időtartamnál régebbi vagy egy adott névszűrővel egyező címkéket. Igény szerint konfigurálhatja acr purge a nem megjelölt jegyzékfájlok törlését.

    A acr purge tárolóparancs jelenleg előzetes verzióban érhető el. További információ: Rendszerképek automatikus törlése egy Azure-tárolóregisztrációs adatbázisból.

  • Ha szeretné, állítson be adatmegőrzési szabályzatot minden beállításjegyzékhez a nem megjelölt jegyzékfájlok kezeléséhez. Ha engedélyezi az adatmegőrzési szabályzatot, a rendszer automatikusan törli a beállításjegyzékben azokat a rendszerkép-jegyzékfájlokat, amelyek nem rendelkeznek társított címkével, valamint a mögöttes rétegadatokat egy megadott időszak után.

    A megőrzési szabályzat jelenleg a Prémium szintű tárolóregisztrációs adatbázisok előzetes verziója. Az adatmegőrzési szabályzat csak a szabályzat érvénybe lépése után létrehozott nem megjelölt jegyzékekre vonatkozik.

Következő lépések

A Azure Container Registry-ben található lemezképtárolással kapcsolatos további információkért lásd: Tárolórendszerképek tárolása Azure Container Registry.