Ta bort containeravbildningar från Azure Container Registry
Om du vill behålla storleken på ditt Azure-containerregister bör du regelbundet ta bort inaktuella avbildningsdata. Vissa containeravbildningar som distribueras till produktion kan kräva mer långsiktig lagring, men andra kan vanligtvis tas bort snabbare. I ett automatiserat bygg- och testscenario kan ditt register till exempel snabbt fyllas med avbildningar som kanske aldrig distribueras och kan rensas strax efter att bygg- och testpasset har slutförts.
Eftersom du kan ta bort bilddata på flera olika sätt är det viktigt att förstå hur varje borttagningsåtgärd påverkar lagringsanvändningen. Den här artikeln beskriver flera metoder för att ta bort bilddata:
- Ta bort en lagringsplats: Tar bort alla bilder och alla unika lager på lagringsplatsen.
- Ta bort med tagg: Tar bort en bild, taggen, alla unika lager som refereras av bilden och alla andra taggar som är associerade med bilden.
- Ta bort efter manifestsammandrag: Tar bort en bild, alla unika lager som refereras av bilden och alla taggar som är associerade med bilden.
En introduktion till dessa begrepp finns i Om register, lagringsplatser och bilder.
Kommentar
När du har tagit bort avbildningsdata stoppar Azure Container Registry faktureringen direkt för den associerade lagringen. Registret återställer dock det associerade lagringsutrymmet med hjälp av en asynkron process. Det tar lite tid innan registret rensar upp lager och visar den uppdaterade lagringsanvändningen.
Ta bort lagringsplats
Om du tar bort en lagringsplats tas alla avbildningar i lagringsplatsen bort, inklusive alla taggar, unika lager och manifest. När du tar bort en lagringsplats återställer du det lagringsutrymme som används av avbildningarna som refererar till unika lager på lagringsplatsen.
Följande Azure CLI-kommando tar bort lagringsplatsen "acr-helloworld" och alla taggar och manifest på lagringsplatsen. Om lager som refereras till av de borttagna manifesten inte refereras till av andra avbildningar i registret tas även deras lagerdata bort, vilket återställer lagringsutrymmet.
az acr repository delete --name myregistry --repository acr-helloworld
Ta bort med tagg
Du kan ta bort enskilda avbildningar från en lagringsplats genom att ange lagringsplatsens namn och tagg i borttagningsåtgärden. När du tar bort med taggen återställer du lagringsutrymmet som används av unika lager i avbildningen (lager som inte delas av andra avbildningar i registret).
Om du vill ta bort med taggen använder du az acr repository delete och anger avbildningsnamnet i parametern --image
. Alla lager som är unika för bilden och alla andra taggar som är associerade med bilden tas bort.
Du kan till exempel ta bort avbildningen "acr-helloworld:latest" från registret "myregistry":
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):
Dricks
Att ta bort med tagg bör inte förväxlas med att ta bort en tagg (ta bort tagg). Du kan ta bort en tagg med Azure CLI-kommandot az acr repository untag. Inget utrymme frigörs när du tar bort en avbildning eftersom dess manifest - och lagerdata finns kvar i registret. Endast själva taggreferensen tas bort.
Ta bort efter manifestsammandrag
En manifestsammandrag kan associeras med en, ingen eller flera taggar. När du tar bort efter sammandrag tas alla taggar som refereras till av manifestet bort, liksom lagerdata för alla lager som är unika för bilden. Data på delat lager tas inte bort.
Om du vill ta bort efter sammandrag anger du först manifestsammandragen för lagringsplatsen som innehåller de bilder som du vill ta bort. Till exempel:
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"
}
]
Ange sedan den sammanfattning som du vill ta bort i kommandot az acr repository delete . Formatet för kommandot är:
az acr repository delete --name <acrName> --image <repositoryName>@<digest>
Om du till exempel vill ta bort det sista manifestet som anges i föregående utdata (med taggen "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):
Avbildningen acr-helloworld:v2
tas bort från registret, liksom alla lagerdata som är unika för avbildningen. Om ett manifest är associerat med flera taggar tas även alla associerade taggar bort.
Ta bort sammandrag efter tidsstämpel
Om du vill behålla storleken på en lagringsplats eller ett register kan du behöva ta bort manifestsammandrag som är äldre än ett visst datum.
Följande Azure CLI-kommando visar alla manifestsammandrag på en lagringsplats som är äldre än en angiven tidsstämpel i stigande ordning. Ersätt <acrName>
och <repositoryName>
med värden som är lämpliga för din miljö. Tidsstämpeln kan vara ett fullständigt datum-tid-uttryck eller ett datum, som i det här exemplet.
az acr manifest list-metadata --name <repositoryName> --registry <acrName> \
--orderby time_asc -o tsv --query "[?lastUpdateTime < '2019-04-05'].[digest, lastUpdateTime]"
När du har identifierat inaktuella manifestsammandrag kan du köra följande Bash-skript för att ta bort manifestsammandrag som är äldre än en angiven tidsstämpel. Det kräver Azure CLI och xargs. Skriptet utför som standard ingen borttagning. Ändra värdet ENABLE_DELETE
till true
för att aktivera borttagning av bilder.
Varning
Använd följande exempelskript med varning – borttagna bilddata är OÅTERKALLELIGA. Om du har system som hämtar avbildningar efter manifestsammandrag (till skillnad från avbildningsnamn) bör du inte köra dessa skript. Om du tar bort manifestsammandragen 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.
#!/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
Ta bort otaggade bilder
Som du nämnde i avsnittet Manifestsammandrag tar push-överföring av en modifierad avbildning med en befintlig tagg bort den tidigare push-överförda bilden, vilket resulterar i en överbliven (eller "dangling") bild. Den tidigare push-överförda avbildningens manifest – och dess lagerdata – finns kvar i registret. Överväg följande händelsesekvens:
Push-avbildningen acr-helloworld med taggen senaste:
docker push myregistry.azurecr.io/acr-helloworld:latest
Kontrollera manifest för lagringsplatsen acr-helloworld:
az acr manifest list-metadata --name acr-helloworld --registry myregistry
[ { "digest": "sha256:d2bdc0c22d78cde155f53b4092111d7e13fe28ebf87a945f94b19c248000ceec", "tags": [ "latest" ], "timestamp": "2018-07-11T21:32:21.1400513Z" } ]
Ändra acr-helloworld Dockerfile
Push-avbildningen acr-helloworld med taggen senaste:
docker push myregistry.azurecr.io/acr-helloworld:latest
Kontrollera manifest för lagringsplatsen 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" } ]
Matrisen taggar tas bort från metadata när en bild tas bort. Det här manifestet finns fortfarande i registret, tillsammans med alla unika lagerdata som det refererar till. Om du vill ta bort sådana överblivna bilder och deras lagerdata måste du ta bort genom att sammanfatta manifestet.
Rensa taggar och manifest automatiskt
Azure Container Registry tillhandahåller följande automatiserade metoder för att ta bort taggar och manifest och deras associerade unika lagerdata:
Skapa en ACR-uppgift som kör
acr purge
containerkommandot för att ta bort alla taggar som är äldre än en viss varaktighet eller matcha ett angivet namnfilter. Du kan också konfigureraacr purge
för att ta bort otaggade manifest.Containerkommandot
acr purge
är för närvarande i förhandsversion. Mer information finns i Rensa avbildningar automatiskt från ett Azure-containerregister.Du kan också ange en kvarhållningsprincip för varje register för att hantera otaggade manifest. När du aktiverar en kvarhållningsprincip tas avbildningsmanifest i registret som inte har några associerade taggar och underliggande lagerdata automatiskt bort efter en angivet period.
Kvarhållningsprincipen är för närvarande en förhandsversionsfunktion i Premium-containerregister . Kvarhållningsprincipen gäller endast för icke-taggade manifest som skapats när principen börjar gälla.
Nästa steg
Mer information om avbildningslagring i Azure Container Registry finns i Container Image Storage i Azure Container Registry.