Share via


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 sommige containerinstallatiekopieën die in productie zijn geïmplementeerd, mogelijk langere opslag vereisen, kunnen andere installatiekopieën doorgaans sneller worden verwijderd. In een geautomatiseerd build- en testscenario kan uw register bijvoorbeeld snel worden gevuld met installatiekopieën die nooit worden geïmplementeerd en kort na het voltooien van de build- en testpas worden opgeschoond.

Omdat u afbeeldingsgegevens op verschillende manieren kunt verwijderen, is het belangrijk om te begrijpen hoe elke verwijderbewerking 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 Voor een inleiding tot deze concepten informatie over registers, opslagplaatsen en installatiekopieën.

Notitie

Nadat u installatiekopieën hebt verwijderd, stopt Azure Container Registry de facturering onmiddellijk voor de bijbehorende opslag. Het register herstelt echter de bijbehorende opslagruimte met behulp van een asynchroon proces. Het duurt enige tijd 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 per 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 verwijdert per tag, 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 wilt verwijderen per tag, 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 alle andere tags die zijn gekoppeld aan de installatiekopieën, worden verwijderd.

Als u bijvoorbeeld de installatiekopie 'acr-helloworld:latest' uit het register 'myregistry' verwijdert:

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 door tag mag niet worden verward met het verwijderen van een tag (losmaken). U kunt een tag verwijderen met de Azure CLI-opdracht az acr repository untag. Er wordt geen ruimte vrijgemaakt wanneer u een installatiekopieën ontkoppelt omdat de manifest - en laaggegevens in het register blijven staan. Alleen de tagreferentie zelf wordt verwijderd.

Verwijderen per manifestsamenvatt

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

Als u wilt verwijderen per samenvatting, moet u eerst de manifestsamenvatten weergeven voor de opslagplaats met de installatiekopieën die u wilt verwijderen. Voorbeeld:

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 samenvatting 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 uit het register verwijderd, net zoals alle laaggegevens die uniek zijn voor die installatiekopieën. Als een manifest aan meerdere tags is gekoppeld, worden alle bijbehorende tags ook verwijderd.

Samenvattingen verwijderen op tijdstempel

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

De volgende Azure CLI-opdracht bevat alle manifestsamenvatingen 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/tijd-expressie 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 manifestsamenvatingen 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 om true het verwijderen van afbeeldingen in te schakelen.

Waarschuwing

Gebruik het volgende voorbeeldscript met waarschuwings-verwijderde afbeeldingsgegevens is ONHERSTELBAAR. Als u systemen hebt die installatiekopieën ophalen op basis van manifestsamenvating (in plaats van de installatiekopienaam), moet u deze scripts niet uitvoeren. Als u de manifestsamenvatingen verwijdert, voorkomt u dat deze systemen de installatiekopieën uit het register halen. In plaats van door manifest op te halen, 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

Niet-gemarkeerde afbeeldingen verwijderen

Zoals vermeld in de sectie Manifestsamenvatking, pusht u een gewijzigde afbeelding met behulp van een bestaande tag de eerder gepushte afbeelding, wat resulteert in een zwevende (of 'dangling'-installatiekopieën). Het manifest van de eerder gepushte installatiekopieën en de bijbehorende laaggegevens blijven in het register aanwezig. Houd rekening met de volgende reeks gebeurtenissen:

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

  2. Controleer de 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. Acr-helloworld Dockerfile wijzigen

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

  5. Controleer de 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 eventuele unieke laaggegevens waarnaar wordt verwezen. Als u dergelijke zwevende afbeeldingen en de bijbehorende laaggegevens wilt verwijderen, moet u verwijderen via manifestsamenvating.

Tags en manifesten automatisch opschonen

Azure Container Registry biedt de volgende geautomatiseerde methoden voor het verwijderen van tags en manifesten en de bijbehorende unieke laaggegevens:

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

    De acr purge containeropdracht is momenteel beschikbaar als preview-versie. Zie Automatisch installatiekopieën opschonen uit een Azure-containerregister voor meer informatie.

  • Stel eventueel een bewaarbeleid in voor elk register om niet-gemarkeerde manifesten te beheren. Wanneer u bewaarbeleid inschakelt, worden installatiekopieën in het register die geen gekoppelde tags hebben 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 niet-gemarkeerde manifesten die zijn gemaakt nadat het beleid van kracht wordt.

Volgende stappen

Zie containerinstallatiekopieënopslag in Azure Container Registry voor meer informatie over de opslag van installatiekopieën in Azure Container Registry.