Dela via


Rensa avbildningar automatiskt från ett Azure-containerregister

När du använder ett Azure-containerregister som en del av ett utvecklingsarbetsflöde 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 snabbt vill ta bort flera artefakter introducerar den här artikeln kommandot acr purge som du kan köra som en ACR-aktivitet 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 finns för tillfället som 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 den 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 enskilda avbildningar med hjälp av Azure CLI-kommandon kan du läsa 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.

Kommentar

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 kommandoaliaset acr 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 taggnamnsuttryck 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 i /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" för timmar och "m" i minuter. Till exempel --ago 2d3h6m väljer du 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. Ta bort alla taggar som är associerade med ett manifest för att rensa det. först då kan du rensa ett kostnadsfritt taggmanifest med hjälp av --untagged.
  • --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. De senaste taggarna bestäms av taggens senaste ändringstid.
  • --concurrency – Anger ett antal rensningsuppgifter som ska bearbetas samtidigt. Ett standardvärde används om den här parametern inte anges.

Kommentar

--untagged Filtret 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 på hello-world lagringsplatsen i myregistry som ändrades för mer än en dag sedan och alla otaggade 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ör 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

I det här exemplet går vi igenom hur acr purge du regelbundet rensar 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 infö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 på 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 den torra körningen skapar du en schemalagd aktivitet 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 avbildningsdata i Azure Container Registry.

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