Containerinstallatiekopieën in Azure Container Registry verwijderen

Als u de grootte van uw Azure-containerregister wilt behouden, moet u regelmatig verouderde installatiekopieën verwijderen. Hoewel voor sommige containerinstallatiekopieën die in productie zijn geïmplementeerd mogelijk langere opslag nodig is, kunnen andere doorgaans sneller worden verwijderd. In een geautomatiseerd build- en testscenario kan uw register bijvoorbeeld snel worden gevuld met installatiekopieën die mogelijk nooit worden geïmplementeerd en kort na het voltooien van de build en test worden opgeschoond.

Omdat u afbeeldingsgegevens op verschillende manieren kunt verwijderen, is het belangrijk om te begrijpen hoe elke verwijderingsbewerking van invloed is op het opslaggebruik. In dit artikel worden verschillende methoden beschreven voor het verwijderen van afbeeldingsgegevens:

  • Een opslagplaats verwijderen: hiermee verwijdert u alle installatiekopieën en alle unieke lagen in de opslagplaats.
  • Verwijderen per tag: hiermee verwijdert u een afbeelding, de tag, alle unieke lagen waarnaar wordt verwezen door de afbeelding en alle andere tags die aan de afbeelding zijn gekoppeld.
  • Verwijderen per manifestsamenvatt: hiermee verwijdert u een afbeelding, alle unieke lagen waarnaar wordt verwezen door de afbeelding en alle tags die aan de afbeelding zijn gekoppeld.

Zie Over registers, opslagplaatsen en installatiekopieën voor een inleiding tot deze concepten.

Notitie

Nadat u afbeeldingsgegevens hebt verwijderd, stopt Azure Container Registry onmiddellijk met het factureren van de bijbehorende opslag. Het register herstelt echter de bijbehorende opslagruimte met behulp van een asynchroon proces. Het duurt even voordat het register lagen opschoont en het bijgewerkte opslaggebruik weergeeft.

Opslagplaats verwijderen

Als u een opslagplaats verwijdert, worden alle installatiekopieën in de opslagplaats verwijderd, inclusief alle tags, unieke lagen en manifesten. Wanneer u een opslagplaats verwijdert, herstelt u de opslagruimte die wordt gebruikt door de installatiekopieën die verwijzen naar unieke lagen in die opslagplaats.

Met de volgende Azure CLI-opdracht verwijdert u de opslagplaats 'acr-helloworld' en alle tags en manifesten in de opslagplaats. Als naar lagen waarnaar wordt verwezen door de verwijderde manifesten niet wordt verwezen door andere installatiekopieën in het register, worden hun laaggegevens ook verwijderd, waardoor de opslagruimte wordt hersteld.

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

Verwijderen op tag

U kunt afzonderlijke installatiekopieën uit een opslagplaats verwijderen door de naam en tag van de opslagplaats op te geven in de verwijderbewerking. Wanneer u per tag verwijdert, herstelt u de opslagruimte die wordt gebruikt door unieke lagen in de installatiekopieën (lagen die niet worden gedeeld door andere installatiekopieën in het register).

Als u per tag wilt verwijderen, gebruikt u az acr repository delete en geeft u de naam van de installatiekopieën op in de --image parameter . Alle lagen die uniek zijn voor de afbeelding en eventuele andere tags die aan de afbeelding zijn gekoppeld, worden verwijderd.

Bijvoorbeeld, het verwijderen van de installatiekopie 'acr-helloworld:latest' uit het register '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

Verwijderen per tag moet niet worden verward met het verwijderen van een tag (loskoppelen). U kunt een tag verwijderen met de Azure CLI-opdracht az acr repository untag. Er wordt geen ruimte vrijgemaakt wanneer u de tag van een installatiekopieën ongedaan maakt omdat de manifest - en laaggegevens in het register blijven. Alleen de tagreferentie zelf wordt verwijderd.

Verwijderen per manifestsamenvatt

Een manifestsamenvating kan worden gekoppeld aan één, geen of meerdere tags. Wanneer u per samenvatting verwijdert, worden alle tags waarnaar wordt verwezen door het manifest verwijderd, net als laaggegevens voor lagen die uniek zijn voor de afbeelding. Gedeelde laaggegevens worden niet verwijderd.

Als u per samenvatting wilt verwijderen, vermeldt u eerst de manifestsamenvatten voor de opslagplaats met de installatiekopieën die u wilt verwijderen. Bijvoorbeeld:

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

Geef vervolgens de digest op die u wilt verwijderen in de opdracht az acr repository delete . De indeling van de opdracht is als volgt:

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

Als u bijvoorbeeld het laatste manifest wilt verwijderen dat in de voorgaande uitvoer wordt vermeld (met de tag '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): 

De acr-helloworld:v2 installatiekopieën worden verwijderd uit het register, net als alle laaggegevens die uniek zijn voor die installatiekopieën. Als een manifest is gekoppeld aan meerdere tags, worden alle gekoppelde tags ook verwijderd.

Samenvattingen per tijdstempel verwijderen

Als u de grootte van een opslagplaats of register wilt behouden, moet u mogelijk periodiek manifestsamenvatten verwijderen die ouder zijn dan een bepaalde datum.

Met de volgende Azure CLI-opdracht worden alle manifestsamenvatten weergegeven in een opslagplaats die ouder is dan een opgegeven tijdstempel, in oplopende volgorde. Vervang en <repositoryName> door <acrName> waarden die geschikt zijn voor uw omgeving. De tijdstempel kan een volledige datum-tijdexpressie of een datum zijn, zoals in dit voorbeeld.

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

Nadat u verouderde manifestsamenvatten hebt geïdentificeerd, kunt u het volgende Bash-script uitvoeren om manifestsamenvatten te verwijderen die ouder zijn dan een opgegeven tijdstempel. Hiervoor zijn de Azure CLI en xargs vereist. Standaard wordt het script niet verwijderd. Wijzig de ENABLE_DELETE waarde in om true het verwijderen van afbeeldingen in te schakelen.

Waarschuwing

Gebruik het volgende voorbeeldscript met waarschuwing: verwijderde afbeeldingsgegevens zijn ONHERSTELBAAR. Als u systemen hebt die installatiekopieën ophalen op basis van manifestsamenvating (in plaats van de naam van de installatiekopie), moet u deze scripts niet uitvoeren. Als u de manifestsamenvatten verwijdert, voorkomt u dat deze systemen de installatiekopieën uit uw register ophalen. In plaats van op te halen per manifest, kunt u overwegen om een uniek tagschema te gebruiken, een aanbevolen best practice.

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

Afbeeldingen zonder vlag verwijderen

Zoals vermeld in de sectie Manifestsamenvatt , wordt bij het pushen van een gewijzigde afbeelding met een bestaande tag de markering van de eerder gepushte afbeelding ongedaan gemaakt, wat resulteert in een zwevende (of 'bungelende' afbeelding). Het manifest van de eerder gepushte installatiekopieën en de bijbehorende laaggegevens blijven in het register. Houd rekening met de volgende volgorde van gebeurtenissen:

  1. Push image acr-helloworld with tag latest: docker push myregistry.azurecr.io/acr-helloworld:latest

  2. Controleer manifesten voor opslagplaats 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. Dockerfile acr-helloworld wijzigen

  4. Push image acr-helloworld with tag latest: docker push myregistry.azurecr.io/acr-helloworld:latest

  5. Controleer manifesten voor opslagplaats 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"
      }
    ]
    

De tagsmatrix wordt verwijderd uit metagegevens wanneer een afbeelding niet is gemarkeerd. Dit manifest bestaat nog steeds in het register, samen met unieke laaggegevens waarnaar wordt verwezen. Als u dergelijke zwevende afbeeldingen en de bijbehorende laaggegevens wilt verwijderen, moet u verwijderen per manifestsamenvatt.

Tags en manifesten automatisch opschonen

Azure Container Registry biedt de volgende geautomatiseerde methoden om tags en manifesten en de bijbehorende unieke laaggegevens te verwijderen:

  • Maak een ACR-taak waarmee de acr purge containeropdracht wordt uitgevoerd om alle tags te verwijderen die ouder zijn dan een bepaalde duur of overeenkomen met een opgegeven naamfilter. Configureer desgewenst acr purge om niet-gemarkeerde manifesten te verwijderen.

    De acr purge containeropdracht is momenteel in preview. Zie Installatiekopieën automatisch opschonen uit een Azure-containerregister voor meer informatie.

  • Stel eventueel een bewaarbeleid in voor elk register om niet-gemarkeerde manifesten te beheren. Wanneer u een bewaarbeleid inschakelt, worden installatiekopieën in het register zonder bijbehorende tags en de onderliggende laaggegevens automatisch verwijderd na een ingestelde periode.

    Het bewaarbeleid is momenteel een preview-functie van Premium-containerregisters. Het bewaarbeleid is alleen van toepassing op manifesten zonder vlag die zijn gemaakt nadat het beleid van kracht wordt.

Volgende stappen

Zie Containerinstallatiekopieën opslaan in Azure Container Registry voor meer informatie over opslag van installatiekopieën in Azure Container Registry.