Installatiekopieën automatisch opschonen vanuit een Azure-containerregister

Wanneer u een Azure-containerregister gebruikt als onderdeel van een ontwikkelwerkstroom, kan het register snel vol zitten met installatiekopieën of andere artefacten die na een korte periode niet meer nodig zijn. Mogelijk wilt u alle tags verwijderen die ouder zijn dan een bepaalde duur of overeenkomen met een opgegeven naamfilter. Als u snel meerdere artefacten wilt verwijderen, maakt u kennis met de acr purge opdracht die u kunt uitvoeren als een on-demand of geplande ACR-taak.

De acr purge opdracht wordt momenteel gedistribueerd in een openbare containerinstallatiekopieën (mcr.microsoft.com/acr/acr-cli:0.5), gebouwd op basis van broncode in de acr-cli-opslagplaats in GitHub. acr purge is momenteel in preview.

U kunt de Azure Cloud Shell of een lokale installatie van de Azure CLI gebruiken om de voorbeelden van ACR-taken in dit artikel uit te voeren. Als u deze lokaal wilt gebruiken, is versie 2.0.76 of hoger vereist. Voer az --version uit om de versie te bekijken. Zie Azure CLI installeren als u de CLI wilt installeren of een upgrade wilt uitvoeren.

Waarschuwing

Gebruik de acr purge opdracht 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 afbeeldingen zonder vlag niet opschonen. Als u installatiekopieën zonder vlag 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.

Zie Containerinstallatiekopieën verwijderen in Azure Container Registry als u tags of manifesten van één installatiekopieën wilt verwijderen met behulp van Azure CLI-opdrachten.

De opdracht opschonen gebruiken

Met de acr purge containeropdracht worden installatiekopieën per tag verwijderd in een opslagplaats die overeenkomen met een naamfilter en die ouder zijn dan een opgegeven duur. Standaard worden alleen tagverwijzingen verwijderd, niet de onderliggende manifesten en laaggegevens. De opdracht heeft een optie om ook manifesten te verwijderen.

Notitie

acr purge verwijdert geen installatiekopieëntag of opslagplaats waarvoor het write-enabled kenmerk is ingesteld op false. Zie Een containerinstallatiekopieën vergrendelen in een Azure-containerregister voor meer informatie.

acr purge is ontworpen om uit te voeren als een containeropdracht in een ACR-taak, zodat deze automatisch wordt geverifieerd met het register waar de taak wordt uitgevoerd en daar acties uitvoert. In de taakvoorbeelden in dit artikel wordt de acr purgeopdrachtalias gebruikt in plaats van een volledig gekwalificeerde opdracht voor een containerinstallatiekopieën.

Belangrijk

  • De standaardopdracht voor het uitvoeren van de acr purge is az acr run --registry <YOUR_REGISTRY> --cmd 'acr purge --optional parameter' /dev/null.
  • U wordt aangeraden de volledige acr purge opdracht uit te voeren om de ACR-opschoning te gebruiken. Voer bijvoorbeeld de acr purge --help uit als az acr run --registry <YOUR_REGISTRY> --cmd 'acr purge --help' /dev/null.

Geef ten minste het volgende op wanneer u uitvoert acr purge:

  • --filter - Een reguliere expressie voor de naam van de opslagplaats en een reguliere expressie met de tagnaam om installatiekopieën in het register te filteren. Voorbeelden: --filter "hello-world:.*" komt overeen met alle tags in de hello-world opslagplaats, --filter "hello-world:^1.*" komt overeen met tags die beginnen met in de hello-world opslagplaats en --filter ".*/cache:.*" komt overeen met 1 alle tags in de opslagplaatsen die eindigen op /cache. U kunt ook meerdere --filter parameters doorgeven.
  • --ago - Een go-stijl duurtekenreeks om een duur aan te geven waarna afbeeldingen worden verwijderd. De duur bestaat uit een reeks van een of meer decimale getallen, elk met een eenheidsachtervoegsel. Geldige tijdseenheden omvatten 'd' voor dagen, 'h' voor uren en 'm' voor minuten. Selecteert bijvoorbeeld alle gefilterde afbeeldingen voor --ago 2d3h6m het laatst gewijzigd meer dan twee dagen, 3 uur en 6 minuten geleden en --ago 1.5h selecteert afbeeldingen die meer dan 1,5 uur geleden voor het laatst zijn gewijzigd.

acr purge ondersteunt verschillende optionele parameters. De volgende twee worden gebruikt in voorbeelden in dit artikel:

  • --untagged - Hiermee geeft u op dat alle manifesten die geen gekoppelde tags (niet-gemarkeerde manifesten) hebben, worden verwijderd. Met deze parameter worden ook niet-gemarkeerde manifesten verwijderd naast tags die al worden verwijderd.
  • --dry-run - Hiermee geeft u op dat er geen gegevens worden verwijderd, maar de uitvoer is hetzelfde als wanneer de opdracht wordt uitgevoerd zonder deze vlag. Deze parameter is handig voor het testen van een opschoningsopdracht om ervoor te zorgen dat deze niet per ongeluk gegevens verwijdert die u wilt behouden.
  • --keep - Hiermee geeft u op dat het laatste x aantal tags dat moet worden verwijderd, behouden blijven.
  • --concurrency - Hiermee geeft u een aantal opschoningstaken op die gelijktijdig moeten worden verwerkt. Er wordt een standaardwaarde gebruikt als deze parameter niet is opgegeven.

Notitie

Het --untagged filter reageert niet op het --ago filter. Voer uit acr purge --helpvoor aanvullende parameters.

acr purge ondersteunt andere functies van ACR Tasks-opdrachten, waaronder uitvoeringsvariabelen en taakuitvoeringslogboeken die worden gestreamd en ook worden opgeslagen voor later ophalen.

Uitvoeren in een taak op aanvraag

In het volgende voorbeeld wordt de opdracht az acr run gebruikt om de acr purge opdracht on-demand uit te voeren. In dit voorbeeld worden alle tags en manifesten van installatiekopieën in de hello-world opslagplaats in myregistry verwijderd die meer dan 1 dag geleden zijn gewijzigd en alle manifesten zonder vlag. De containeropdracht wordt doorgegeven met behulp van een omgevingsvariabele. De taak wordt uitgevoerd zonder broncontext.

# Environment variable for container command line
PURGE_CMD="acr purge --filter 'hello-world:.*' \
  --untagged --ago 1d"

az acr run \
  --cmd "$PURGE_CMD" \
  --registry myregistry \
  /dev/null

Uitvoeren in een geplande taak

In het volgende voorbeeld wordt de opdracht az acr task create gebruikt om een dagelijks geplande ACR-taak te maken. De taak verwijdert tags die meer dan 7 dagen geleden zijn gewijzigd in de hello-world opslagplaats. De containeropdracht wordt doorgegeven met behulp van een omgevingsvariabele. De taak wordt uitgevoerd zonder broncontext.

# Environment variable for container command line
PURGE_CMD="acr purge --filter 'hello-world:.*' \
  --ago 7d"

az acr task create --name purgeTask \
  --cmd "$PURGE_CMD" \
  --schedule "0 0 * * *" \
  --registry myregistry \
  --context /dev/null

Voer de opdracht az acr task show uit om te zien of de timertrigger is geconfigureerd.

Grote aantallen tags en manifesten opschonen

Het opschonen van een groot aantal tags en manifesten kan enkele minuten of langer duren. Als u duizenden tags en manifesten wilt opschonen, moet de opdracht mogelijk langer worden uitgevoerd dan de standaardtime-outtijd van 600 seconden voor een taak op aanvraag of 3600 seconden voor een geplande taak. Als de time-outtijd wordt overschreden, wordt slechts een subset van tags en manifesten verwijderd. Om ervoor te zorgen dat een grootschalige opschoning is voltooid, geeft u de --timeout parameter door om de waarde te verhogen.

Met de volgende taak op aanvraag wordt bijvoorbeeld een time-outtijd van 3600 seconden (1 uur) ingesteld:

# Environment variable for container command line
PURGE_CMD="acr purge --filter 'hello-world:.*' \
  --ago 1d --untagged"

az acr run \
  --cmd "$PURGE_CMD" \
  --registry myregistry \
  --timeout 3600 \
  /dev/null

Voorbeeld: Geplande opschoning van meerdere opslagplaatsen in een register

In dit voorbeeld wordt uitgelegd hoe u acr purge meerdere opslagplaatsen in een register periodiek kunt opschonen. U hebt bijvoorbeeld een ontwikkelingspijplijn waarmee installatiekopieën naar de samples/devimage1 opslagplaatsen en samples/devimage2 worden gepusht. U importeert periodiek installatiekopieën voor ontwikkeling in een productieopslagplaats voor uw implementaties, zodat u de ontwikkelinstallatiekopieën niet meer nodig hebt. Wekelijks schoont u de samples/devimage1 opslagplaatsen en samples/devimage2 op, ter voorbereiding op het werk van de komende week.

Een voorbeeld van de opschoning bekijken

Voordat u gegevens verwijdert, raden we u aan een opschoningstaak op aanvraag uit te voeren met behulp van de --dry-run parameter . Met deze optie kunt u de tags en manifesten zien die met de opdracht worden verwijderd, zonder gegevens te verwijderen.

In het volgende voorbeeld selecteert het filter in elke opslagplaats alle tags. De --ago 0d parameter komt overeen met installatiekopieën van alle leeftijden in de opslagplaatsen die overeenkomen met de filters. Wijzig de selectiecriteria waar nodig voor uw scenario. De --untagged parameter geeft aan dat manifesten naast tags moeten worden verwijderd. De containeropdracht wordt doorgegeven aan de opdracht az acr run met behulp van een omgevingsvariabele.

# Environment variable for container command line
PURGE_CMD="acr purge \
  --filter 'samples/devimage1:.*' --filter 'samples/devimage2:.*' \
  --ago 0d --untagged --dry-run"

az acr run \
  --cmd "$PURGE_CMD" \
  --registry myregistry \
  /dev/null

Controleer de uitvoer van de opdracht om de tags en manifesten te zien die overeenkomen met de selectieparameters. Omdat de opdracht wordt uitgevoerd met --dry-run, worden er geen gegevens verwijderd.

Voorbeelduitvoer:

[...]
Deleting tags for repository: samples/devimage1
myregistry.azurecr.io/samples/devimage1:232889b
myregistry.azurecr.io/samples/devimage1:a21776a
Deleting manifests for repository: samples/devimage1
myregistry.azurecr.io/samples/devimage1@sha256:81b6f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e788b
myregistry.azurecr.io/samples/devimage1@sha256:3ded859790e68bd02791a972ab0bae727231dc8746f233a7949e40f8ea90c8b3
Deleting tags for repository: samples/devimage2
myregistry.azurecr.io/samples/devimage2:5e788ba
myregistry.azurecr.io/samples/devimage2:f336b7c
Deleting manifests for repository: samples/devimage2
myregistry.azurecr.io/samples/devimage2@sha256:8d2527cde610e1715ad095cb12bc7ed169b60c495e5428eefdf336b7cb7c0371
myregistry.azurecr.io/samples/devimage2@sha256:ca86b078f89607bc03ded859790e68bd02791a972ab0bae727231dc8746f233a

Number of deleted tags: 4
Number of deleted manifests: 4
[...]

Het opschonen plannen

Nadat u de uitvoering hebt gecontroleerd, maakt u een geplande taak om het opschonen te automatiseren. In het volgende voorbeeld wordt een wekelijkse taak gepland op zondag om 1:00 UTC om de vorige opschoningsopdracht uit te voeren:

# Environment variable for container command line
PURGE_CMD="acr purge \
  --filter 'samples/devimage1:.*' --filter 'samples/devimage2:.*' \
  --ago 0d --untagged"

az acr task create --name weeklyPurgeTask \
  --cmd "$PURGE_CMD" \
  --schedule "0 1 * * Sun" \
  --registry myregistry \
  --context /dev/null

Voer de opdracht az acr task show uit om te zien of de timertrigger is geconfigureerd.

Volgende stappen

Meer informatie over andere opties voor het verwijderen van afbeeldingsgegevens in Azure Container Registry.

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