Ta bort containeravbildningar från Azure Container Registry

Om du vill behålla storleken på ditt Azure-containerregister bör du regelbundet ta bort inaktuella avbildningsdata. Vissa containeravbildningar som distribueras till produktion kan kräva långsiktig lagring, men andra kan vanligtvis tas bort snabbare. I ett scenario med automatiserad version och testning kan ditt register till exempel snabbt fyllas med avbildningar som kanske aldrig distribueras och kan rensas strax efter att du har slutfört bygg- och testpasset.

Eftersom du kan ta bort bilddata på flera olika sätt är det viktigt att förstå hur varje borttagningsåtgärd påverkar lagringsanvändningen. Den här artikeln beskriver flera metoder för att ta bort bilddata:

  • Ta bort en lagringsplats: Tar bort alla bilder och alla unika lager på lagringsplatsen.
  • Ta bort med tagg: Tar bort en bild, taggen, alla unika lager som refereras av bilden och alla andra taggar som är associerade med bilden.
  • Ta bort efter manifestsammandrag: Tar bort en bild, alla unika lager som refereras av bilden och alla taggar som är associerade med bilden.

En introduktion till dessa begrepp finns i Om register, lagringsplatser och bilder.

Anteckning

När du har tagit bort avbildningsdata stoppar Azure Container Registry faktureringen direkt för den associerade lagringen. Registret återställer dock det associerade lagringsutrymmet med hjälp av en asynkron process. Det tar lite tid innan registret rensar upp lager och visar den uppdaterade lagringsanvändningen.

Ta bort lagringsplats

Om du tar bort en lagringsplats tas alla avbildningar i lagringsplatsen bort, inklusive alla taggar, unika lager och manifest. När du tar bort en lagringsplats återställer du det lagringsutrymme som används av avbildningarna som refererar till unika lager på lagringsplatsen.

Följande Azure CLI-kommando tar bort lagringsplatsen "acr-helloworld" och alla taggar och manifest på lagringsplatsen. Om lager som refereras av de borttagna manifesten inte refereras till av andra avbildningar i registret tas även deras lagerdata bort, vilket återställer lagringsutrymmet.

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

Ta bort efter tagg

Du kan ta bort enskilda avbildningar från en lagringsplats genom att ange lagringsplatsens namn och tagg i borttagningsåtgärden. När du tar bort med taggen återställer du lagringsutrymmet som används av unika lager i avbildningen (lager som inte delas av andra avbildningar i registret).

Om du vill ta bort med taggen använder du az acr repository delete och anger avbildningsnamnet i parametern --image . Alla lager som är unika för bilden och eventuella andra taggar som är associerade med bilden tas bort.

Du kan till exempel ta bort avbildningen "acr-helloworld:latest" från registret "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):

Tips

Att ta bort efter tagg bör inte förväxlas med att ta bort en tagg (ta bort). Du kan ta bort en tagg med Azure CLI-kommandot az acr repository untag. Inget utrymme frigörs när du avtaggar en avbildning eftersom dess manifest - och lagerdata finns kvar i registret. Endast taggreferensen tas bort.

Ta bort efter manifestsammandrag

En manifestsammandrag kan associeras med en, ingen eller flera taggar. När du tar bort med sammandrag tas alla taggar som refereras till av manifestet bort, liksom lagerdata för alla lager som är unika för bilden. Delade lagerdata tas inte bort.

Om du vill ta bort efter sammandrag anger du först manifestsammandragen för lagringsplatsen som innehåller de bilder som du vill ta bort. Ett exempel:

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

Ange sedan den sammanfattning som du vill ta bort i kommandot az acr repository delete . Formatet för kommandot är:

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

Om du till exempel vill ta bort det sista manifestet som anges i föregående utdata (med taggen "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): 

Avbildningen acr-helloworld:v2 tas bort från registret, liksom alla lagerdata som är unika för avbildningen. Om ett manifest är associerat med flera taggar tas även alla associerade taggar bort.

Ta bort sammandrag efter tidsstämpel

Om du vill behålla storleken på en lagringsplats eller ett register kan du behöva ta bort manifestsammandrag som är äldre än ett visst datum.

Följande Azure CLI-kommando visar alla manifestsammandrag på en lagringsplats som är äldre än en angiven tidsstämpel i stigande ordning. Ersätt <acrName> och <repositoryName> med värden som är lämpliga för din miljö. Tidsstämpeln kan vara ett fullständigt datum-tid-uttryck eller ett datum, som i det här exemplet.

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

När du har identifierat inaktuella manifestsammandrag kan du köra följande Bash-skript för att ta bort manifestsammandrag som är äldre än en angiven tidsstämpel. Det kräver Azure CLI och xargs. Skriptet utför som standard ingen borttagning. Ändra värdet ENABLE_DELETE till true för att aktivera borttagning av avbildningar.

Varning

Använd följande exempelskript med varning – borttagna bilddata är OÅTERKALLELIGA. Om du har system som hämtar avbildningar efter manifestsammandrag (till skillnad från avbildningsnamn) bör du inte köra dessa skript. Om du tar bort manifestsammandragen hindras dessa system från att hämta avbildningarna från registret. I stället för att hämta efter manifest bör du överväga att använda ett unikt taggningsschema , en rekommenderad metod.

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

Ta bort otaggade bilder

Som nämnts i avsnittet Manifestsammandrag tar push-överföring av en modifierad bild med en befintlig tagg bort den tidigare push-överförda bilden, vilket resulterar i en överbliven (eller "dangling") bild. Den tidigare push-överförda avbildningens manifest – och dess lagerdata – finns kvar i registret. Överväg följande händelsesekvens:

  1. Push-avbildningen acr-helloworld med taggen senaste:docker push myregistry.azurecr.io/acr-helloworld:latest

  2. Kontrollera manifest för lagringsplatsen 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. Ändra acr-helloworld Dockerfile

  4. Push-avbildningen acr-helloworld med taggen senaste:docker push myregistry.azurecr.io/acr-helloworld:latest

  5. Kontrollera manifest för lagringsplatsen 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"
      }
    ]
    

Matrisen taggar tas bort från metadata när en bild inte är taggad. Det här manifestet finns fortfarande i registret, tillsammans med alla unika lagerdata som det refererar till. Om du vill ta bort sådana överblivna bilder och deras lagerdata måste du ta bort med manifestsammandrag.

Rensa taggar och manifest automatiskt

Azure Container Registry tillhandahåller följande automatiserade metoder för att ta bort taggar och manifest samt tillhörande unika lagerdata:

  • Skapa en ACR-uppgift som kör acr purge containerkommandot för att ta bort alla taggar som är äldre än en viss varaktighet eller matcha ett angivet namnfilter. Du kan också konfigurera acr purge för att ta bort otaggade manifest.

    Containerkommandot acr purge är för närvarande i förhandsversion. Mer information finns i Rensa avbildningar automatiskt från ett Azure-containerregister.

  • Du kan också ange en kvarhållningsprincip för varje register för att hantera otaggade manifest. När du aktiverar en kvarhållningsprincip tas avbildningsmanifest i registret som inte har några associerade taggar och underliggande lagerdata automatiskt bort efter en angivna period.

    Kvarhållningsprincipen är för närvarande en förhandsversionsfunktion i Premium-containerregister . Kvarhållningsprincipen gäller endast för icke-taggade manifest som skapats när principen börjar gälla.

Nästa steg

Mer information om avbildningslagring i Azure Container Registry finns i Containeravbildningslagring i Azure Container Registry.