Rensa avbildningar automatiskt från ett Azure-containerregister

När du använder ett Azure-containerregister som en del av ett arbetsflöde för utveckling kan registret snabbt fyllas med avbildningar eller andra artefakter som inte behövs efter en kort period. Du kanske vill ta bort alla taggar som är äldre än en viss varaktighet eller matcha ett angivet namnfilter. Om du vill ta bort flera artefakter snabbt introducerar den här artikeln kommandot acr purge som du kan köra som en ACR-uppgift på begäran eller schemalagd .

Kommandot acr purge distribueras för närvarande i en offentlig containeravbildning (mcr.microsoft.com/acr/acr-cli:0.5), som skapats från källkoden på lagringsplatsen acr-cli i GitHub. acr purge är för närvarande i förhandsversion.

Du kan använda Azure Cloud Shell eller en lokal installation av Azure CLI för att köra ACR-uppgiftsexemplen i den här artikeln. Om du vill använda det lokalt krävs version 2.0.76 eller senare. Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.

Varning

acr purge Använd kommandot med varning – borttagna bilddata är OÅTERKALLELIGA. Om du har system som hämtar bilder efter manifestsammandrag (till skillnad från bildnamn) bör du inte rensa otaggade bilder. Om du tar bort otaggade avbildningar 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.

Om du vill ta bort taggar eller manifest för en avbildning med hjälp av Azure CLI-kommandon läser du Ta bort containeravbildningar i Azure Container Registry.

Använd rensningskommandot

Containerkommandot acr purge tar bort avbildningar efter tagg på en lagringsplats som matchar ett namnfilter och som är äldre än en angiven varaktighet. Som standard tas endast taggreferenser bort, inte underliggande manifest och lagerdata. Kommandot har ett alternativ för att även ta bort manifest.

Anteckning

acr purge tar inte bort en avbildningstagg eller lagringsplats där write-enabled attributet är inställt på false. Mer information finns i Låsa en containeravbildning i ett Azure-containerregister.

acr purge är utformat för att köras som ett containerkommando i en ACR-uppgift, så att den autentiseras automatiskt med registret där uppgiften körs och utför åtgärder där. I uppgiftsexemplen i den här artikeln används kommandoaliasetacr purge i stället för ett fullständigt kvalificerat containeravbildningskommando.

Viktigt

  • Standardkommandot för att köra acr purge är az acr run --registry <YOUR_REGISTRY> --cmd 'acr purge --optional parameter' /dev/null.
  • Vi rekommenderar att du kör det fullständiga acr purge kommandot för att använda ACR-rensningen. Kör till exempel acr purge --help som az acr run --registry <YOUR_REGISTRY> --cmd 'acr purge --help' /dev/null.

Ange minst följande när du kör acr purge:

  • --filter – Ett reguljärt uttryck för lagringsplatsens namn och ett reguljärt taggnamn för att filtrera avbildningar i registret. Exempel: --filter "hello-world:.*" matchar alla taggar på hello-world lagringsplatsen, --filter "hello-world:^1.*" matchar taggar som börjar med 1hello-world lagringsplatsen och --filter ".*/cache:.*" matchar alla taggar i lagringsplatserna som slutar på /cache. Du kan också skicka flera --filter parametrar.
  • --ago – En varaktighetssträng i Go-stil som anger en varaktighet utöver vilken bilder tas bort. Varaktigheten består av en sekvens med ett eller flera decimaltal, var och en med ett enhetssuffix. Giltiga tidsenheter inkluderar "d" för dagar, "h" i timmar och "m" i minuter. Väljer till exempel --ago 2d3h6m alla filtrerade bilder som senast ändrades för mer än två dagar, 3 timmar och 6 minuter sedan och --ago 1.5h väljer bilder som senast ändrades för mer än 1,5 timmar sedan.

acr purge stöder flera valfria parametrar. Följande två används i exempel i den här artikeln:

  • --untagged – Anger att alla manifest som inte har associerade taggar (otaggade manifest) tas bort. Den här parametern tar också bort otaggade manifest utöver taggar som redan tas bort.
  • --dry-run – Anger att inga data tas bort, men utdata är desamma som om kommandot körs utan den här flaggan. Den här parametern är användbar för att testa ett rensningskommando för att se till att den inte oavsiktligt tar bort data som du tänker bevara.
  • --keep – Anger att det senaste x antalet taggar som ska tas bort behålls.
  • --concurrency – Anger ett antal rensningsuppgifter som ska bearbetas samtidigt. Ett standardvärde används om den här parametern inte anges.

Anteckning

Filtret --untagged svarar inte på --ago filtret. Kör för ytterligare parametrar acr purge --help.

acr purge stöder andra funktioner i ACR Tasks-kommandon, inklusive körningsvariabler och aktivitetskörningsloggar som strömmas och även sparas för senare hämtning.

Köra i en aktivitet på begäran

I följande exempel används kommandot az acr run för att köra acr purge kommandot på begäran. Det här exemplet tar bort alla bildtaggar och manifest i hello-world lagringsplatsen i myregistry som ändrades för mer än en dag sedan och alla icke-taggade manifest. Containerkommandot skickas med hjälp av en miljövariabel. Uppgiften körs utan källkontext.

# 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

Köra i en schemalagd aktivitet

I följande exempel används kommandot az acr task create för att skapa en daglig schemalagd ACR-aktivitet. Uppgiften rensar taggar som ändrades för mer än 7 dagar sedan på lagringsplatsen hello-world . Containerkommandot skickas med hjälp av en miljövariabel. Uppgiften körs utan källkontext.

# 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

Kör kommandot az acr task show för att se att timerutlösaren är konfigurerad.

Rensa ett stort antal taggar och manifest

Det kan ta flera minuter eller längre att rensa ett stort antal taggar och manifest. Om du vill rensa tusentals taggar och manifest kan kommandot behöva köras längre än standardtidsgränsen på 600 sekunder för en aktivitet på begäran eller 3 600 sekunder för en schemalagd aktivitet. Om tidsgränsen överskrids tas endast en delmängd av taggar och manifest bort. För att säkerställa att en storskalig rensning är klar skickar du parametern --timeout för att öka värdet.

Följande aktivitet på begäran anger till exempel en tidsgräns på 3 600 sekunder (1 timme):

# 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

Exempel: Schemalagd rensning av flera lagringsplatser i ett register

Det här exemplet går igenom användningen acr purge för att regelbundet rensa flera lagringsplatser i ett register. Du kan till exempel ha en utvecklingspipeline som skickar avbildningar till lagringsplatserna samples/devimage1 och samples/devimage2 . Du importerar regelbundet utvecklingsbilder till en produktionslagringsplats för dina distributioner, så du behöver inte längre utvecklingsbilderna. Varje vecka rensar du lagringsplatserna samples/devimage1 och samples/devimage2 som förberedelse för den kommande veckans arbete.

Förhandsgranska rensningen

Innan du tar bort data rekommenderar vi att du kör en rensningsaktivitet på begäran med hjälp av parametern --dry-run . Med det här alternativet kan du se taggar och manifest som kommandot rensar, utan att ta bort några data.

I följande exempel väljer filtret i varje lagringsplats alla taggar. Parametern --ago 0d matchar bilder av alla åldrar i de lagringsplatser som matchar filtren. Ändra urvalskriterierna efter behov för ditt scenario. Parametern --untagged anger att manifest ska tas bort utöver taggar. Containerkommandot skickas till kommandot az acr run med hjälp av en miljövariabel.

# 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

Granska kommandoutdata för att se taggar och manifest som matchar urvalsparametrarna. Eftersom kommandot körs med --dry-runtas inga data bort.

Exempel på utdata:

[...]
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
[...]

Schemalägg rensningen

När du har verifierat torrkörningen skapar du en schemalagd uppgift för att automatisera rensningen. I följande exempel schemaläggs en veckoaktivitet på söndag kl. 1:00 UTC för att köra föregående rensningskommando:

# 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

Kör kommandot az acr task show för att se att timerutlösaren är konfigurerad.

Nästa steg

Läs mer om andra alternativ för att ta bort bilddata i Azure Container Registry.

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