Installatiekopieën automatisch opschonen vanuit een Azure-containerregister
Wanneer u een Azure-containerregister gebruikt als onderdeel van een ontwikkelwerkstroom, kan het register snel invullen met installatiekopieën of andere artefacten die na een korte periode niet 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, introduceert dit artikel 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 (mcr.microsoft.com/acr/acr-cli:0.5
), gebouwd op basis van broncode in de opslagplaats acr-cli 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 ACR-taakvoorbeelden 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. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren.
Waarschuwing
Gebruik de acr purge
opdracht met waarschuwings-verwijderde afbeeldingsgegevens is ONHERSTELBAAR. Als u systemen hebt die installatiekopieën ophalen op basis van manifestsamenvating (in plaats van de naam van de installatiekopie), moet u geen niet-gemarkeerde installatiekopieën leegmaken. Als u niet-gemarkeerde installatiekopieën verwijdert, kunnen deze systemen de installatiekopieën niet ophalen uit uw register. In plaats van door manifest op te halen, kunt u overwegen om een uniek tagschema te gebruiken, een aanbevolen best practice.
Zie Containerinstallatiekopieën verwijderen in Azure Container Registry als u enkele installatiekopieën of manifesten met behulp van Azure CLI-opdrachten wilt verwijderen.
Gebruik de opdracht Opschonen
Met de acr purge
containeropdracht worden installatiekopieën verwijderd op tag in een opslagplaats die overeenkomt 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 afbeeldingstag of opslagplaats waarop het write-enabled
kenmerk is ingesteld false
. Zie Een containerinstallatiekopieën vergrendelen in een Azure-containerregister voor meer informatie.
acr purge
is ontworpen om te worden uitgevoerd als een containeropdracht in een ACR-taak, zodat deze automatisch wordt geverifieerd met het register waar de taak wordt uitgevoerd en acties daar uitvoert. In de taakvoorbeelden in dit artikel wordt de acr purge
opdrachtalias gebruikt in plaats van een volledig gekwalificeerde containerinstallatiekopieopdracht.
Belangrijk
- De standaardopdracht voor het uitvoeren van de
acr purge
isaz 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 Purge te gebruiken. Voer bijvoorbeeld deacr purge --help
asaz acr run --registry <YOUR_REGISTRY> --cmd 'acr purge --help' /dev/null
uit.
Geef minimaal het volgende op wanneer u uitvoert acr purge
:
--filter
- Een opslagplaatsnaam reguliere expressie en een reguliere expressie tagnaam om installatiekopieën in het register te filteren. Voorbeelden:--filter "hello-world:.*"
komt overeen met alle tags in dehello-world
opslagplaats,--filter "hello-world:^1.*"
komt overeen met tags die beginnen met dehello-world
opslagplaats en--filter ".*/cache:.*"
komt overeen met1
alle tags in de opslagplaatsen die eindigen op/cache
. U kunt ook meerdere--filter
parameters doorgeven.--ago
- Een tekenreeks voor duur in go-stijl om een duur aan te geven die verder gaat dan welke afbeeldingen worden verwijderd. De duur bestaat uit een reeks van een of meer decimale getallen, elk met een eenheidsachtervoegsel. Geldige tijdseenheden zijn 'd' voor dagen, 'h' voor uren en 'm' voor minuten. Selecteert bijvoorbeeld--ago 2d3h6m
alle gefilterde afbeeldingen die meer dan twee dagen, 3 uur en 6 minuten geleden zijn gewijzigd en--ago 1.5h
selecteert afbeeldingen die meer dan 1,5 uur geleden 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. Verwijder alle tags die aan een manifest zijn gekoppeld om het te verwijderen; alleen dan kunt u een gratis tagmanifest opschonen met behulp van--untagged
.--dry-run
- Geeft aan dat er geen gegevens worden verwijderd, maar de uitvoer is hetzelfde als als 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 te verwijderen tags behouden blijven. De meest recente tags worden bepaald door de laatste wijzigingstijd van de tag.--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 voor aanvullende parameters de opdracht uit acr purge --help
.
acr purge
ondersteunt andere functies van ACR Tasks-opdrachten, waaronder uitvoeringsvariabelen en taakuitvoeringslogboeken die worden gestreamd en die 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 afbeeldingstags en manifesten in de hello-world
opslagplaats in mijn register 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 dagelijkse geplande ACR-taak te maken. Met de taak worden tags die meer dan 7 dagen geleden zijn gewijzigd in de hello-world
opslagplaats verwijderd. 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 dat 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, worden alleen een subset van tags en manifesten verwijderd. Als u ervoor wilt 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 acr purge
u meerdere opslagplaatsen in een register periodiek kunt opschonen. U hebt bijvoorbeeld een ontwikkelingspijplijn waarmee installatiekopieën naar de samples/devimage1
en samples/devimage2
opslagplaatsen worden gepusht. U importeert regelmatig ontwikkelingsinstallatiekopieën in een productieopslagplaats voor uw implementaties, zodat u de ontwikkelinstallatiekopieën niet meer nodig hebt. Op wekelijkse basis schoont u de samples/devimage1
en samples/devimage2
opslagplaatsen 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 door 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 afbeeldingen van alle leeftijden in de opslagplaatsen die overeenkomen met de filters. Wijzig de selectiecriteria indien nodig voor uw scenario. De --untagged
parameter geeft aan om naast tags manifesten te verwijderen. 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
[...]
De opschoning plannen
Nadat u de drooguitvoering hebt gecontroleerd, maakt u een geplande taak om de leegloop 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 dat de timertrigger is geconfigureerd.
Volgende stappen
Meer informatie over andere opties voor het verwijderen van afbeeldingsgegevens in Azure Container Registry.
Zie Container Image Storage in Azure Container Registry voor meer informatie over de opslag van installatiekopieën.