Automatisches Bereinigen von Images aus einer Azure-Containerregistrierung
Wenn Sie eine Azure-Containerregistrierung als Teil eines Entwicklungsworkflows verwenden, kann die Registrierung schnell mit Bildern oder anderen Artefakten aufgefüllt werden, die nach kurzer Zeit nicht mehr benötigt werden. Sie können alle Tags löschen, die älter als eine bestimmte Dauer sind oder einem angegebenen Namensfilter entsprechen. Zum schnellen Löschen mehrerer Artefakte wird in diesem Artikel der Befehl acr purge
eingeführt, den Sie als bedarfsgesteuerte oder geplante ACR-Aufgabe ausführen können.
Der Befehl acr purge
wird zurzeit in einem öffentlichen Containerimage (mcr.microsoft.com/acr/acr-cli:0.5
) verteilt, das aus Quellcode im Repository acr-cli auf GitHub erstellt wurde. acr purge
befindet sich derzeit in der Vorschauphase.
Sie können die Azure Cloud Shell oder eine lokale Installation der Azure CLI verwenden, um die ACR-Aufgabenbeispiele in diesem Artikel auszuführen. Für die lokale Verwendung ist mindestens Version 2.0.76 erforderlich. Führen Sie az --version
aus, um die Version zu ermitteln. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sei bei Bedarf unter Installieren der Azure CLI.
Warnung
Verwenden Sie den Befehl acr purge
mit Vorsicht: Gelöschte Imagedaten sind NICHT WIEDERHERSTELLBAR. Wenn Sie Systeme haben, die Images nach dem Manifesthash pullen (und nicht nach dem Imagenamen), sollten Sie keine Images ohne Tags bereinigen. Wenn Sie Images ohne Tags löschen, hindern Sie diese Systeme daran, die Images aus Ihrer Registrierung zu löschen. Erwägen Sie statt des Pullens nach Manifest die Einführung eines eindeutigen Tagging-Schemas. Dies ist eine bewährte Methode.
Informationen zum Löschen einzelner Imagetags oder Manifeste mithilfe von Azure CLI-Befehlen finden Sie unter Löschen von Containerimages in Azure Container Registry.
Verwenden des Bereinigungsbefehls
Der Containerbefehl acr purge
löscht Images nach Tag in einem Repository, die einem Namensfilter entsprechen und älter als eine angegebene Dauer ist. Standardmäßig werden nur Tagverweise gelöscht, nicht die zugrunde liegenden Manifeste und Ebenendaten. Der Befehl verfügt über eine Option, um auch Manifeste zu löschen.
Hinweis
acr purge
löscht kein Imagetag oder Repository, wo das Attribut write-enabled
auf false
festgelegt ist. Informationen hierzu finden Sie unter Sperren von Containerimages in einer Azure-Containerregistrierung.
acr purge
ist darauf ausgelegt, als Containerbefehl in einer ACR-Aufgabe ausgeführt zu werden, sodass er sich automatisch bei der Registrierung authentifiziert, in der die Aufgabe ausgeführt wird, und dort Aktionen ausführt. Die Aufgabenbeispiele in diesem Artikel verwenden den Befehlsaliasacr purge
anstelle eines vollqualifizierten Containerimagebefehls.
Wichtig
- Der Standardbefehl zum Ausführen von
acr purge
istaz acr run --registry <YOUR_REGISTRY> --cmd 'acr purge --optional parameter' /dev/null
. - Es wird empfohlen, den vollständigen
acr purge
-Befehl auszuführen, um die ACR-Bereinigung zu verwenden. Führen Sie beispielsweiseacr purge --help
alsaz acr run --registry <YOUR_REGISTRY> --cmd 'acr purge --help' /dev/null
aus.
Geben Sie beim Ausführen des Befehls acr purge
mindestens Folgendes an:
--filter
– Ein Repositoryname regulärer Ausdruck und ein Tagname regulärer Ausdruck zum Filtern von Images in der Registrierung. Beispiele:--filter "hello-world:.*"
entspricht allen Tags imhello-world
-Repository,--filter "hello-world:^1.*"
entspricht mit1
beginnenden Tags imhello-world
-Repository, und--filter ".*/cache:.*"
entspricht allen Tags in den Repositorys, die in/cache
enden. Sie können auch mehrere--filter
-Parameter übergeben.--ago
: Eine Go-artige Dauerzeichenfolge, die eine Dauer angibt, nach der Images gelöscht werden sollen. Die Dauer besteht aus einer Abfolge von einer oder mehreren Dezimalzahlen, von denen jede über ein Einheitensuffix verfügt. Gültige Zeiteinheiten sind z. B. „d“ für Tage, „h“ für Stunden und „m“ für Minuten.--ago 2d3h6m
wählt beispielsweise alle gefilterten Images aus, die zuletzt vor mehr als 3 Tagen, 6 Stunden und 1,5 Minuten geändert wurden, und--ago 1.5h
wählt Images aus, die zuletzt vor mehr als 1,5 Stunden geändert wurden.
acr purge
unterstützt mehrere optionale Parameter. Die folgenden zwei werden in Beispielen in diesem Artikel verwendet:
--untagged
: Gibt an, dass alle Manifeste ohne zugeordnete Tags (nicht markierte Manifeste) gelöscht werden. Dieser Parameter löscht außerdem nicht markierte Manifeste zusätzlich zu Tags, die bereits gelöscht werden. Entfernen Sie alle Tags, die einem Manifest zugeordnet sind, um es zu löschen. Nur dann können Sie ein tagfreies Manifest mithilfe von--untagged
löschen.--dry-run
: Gibt an, dass keine Daten gelöscht werden, aber die Ausgabe ist identisch mit der, als ob der Befehl ohne dieses Flag ausgeführt wird. Dieser Parameter ist hilfreich beim Testen eines Bereinigungsbefehls, um sicherzustellen, dass er nicht versehentlich Daten löscht, die Sie beibehalten möchten.--keep
: Dieser Parameter gibt an, dass die aktuelle Anzahl x der zu löschenden Tags beibehalten wird. Die neuesten Tags werden durch die Uhrzeit der letzten Änderung des Tags bestimmt.--concurrency
: Gibt eine Reihe von Löschtasks an, die gleichzeitig verarbeitet werden sollen. Wenn dieser Parameter nicht angegeben wird, wird ein Standardwert verwendet.
Hinweis
Der Filter --untagged
reagiert nicht auf den Filter --ago
.
Zur Anzeige weiterer Parameter führen Sie acr purge --help
aus.
Der Befehl acr purge
unterstützt weitere Funktionen von ACR Tasks-Befehlen (einschließlich Run-Variablen und gestreamte und für den späteren Abruf gespeicherte Ausführungsprotokolle für Aufgaben).
Ausführen einer bedarfsgesteuerten Aufgabe
Das folgende Beispiel verwendet den Befehl az acr run, um den Befehl acr purge
bedarfsgesteuert auszuführen. In diesem Beispiel werden alle Imagetags und Manifeste im Repository hello-world
in myregistry gelöscht, die vor mehr als 1 Tag geändert wurden, und alle nicht markierten Manifeste. Der Containerbefehl wird mithilfe einer Umgebungsvariablen übergeben. Die Aufgabe wird ohne Quellkontext ausgeführt.
# 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
Ausführen in einer geplanten Aufgabe
Im folgenden Beispiel wird der Befehl az acr task create verwendet, um eine täglich geplante ACR-Aufgabe zu erstellen. Die Aufgabe bereinigt Tags, die vor mehr als 7 Tagen im Repository hello-world
geändert wurden. Der Containerbefehl wird mithilfe einer Umgebungsvariablen übergeben. Die Aufgabe wird ohne Quellkontext ausgeführt.
# 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
Führen Sie den Befehl az acr task show aus, um zu sehen, ob der Timertrigger konfiguriert ist.
Bereinigen einer großen Anzahl von Tags und Manifesten
Das Bereinigen einer großen Anzahl von Tags und Manifesten kann mehrere Minuten oder länger dauern. Um Tausende von Tags und Manifesten zu bereinigen, muss der Befehl möglicherweise länger als die Standardtimeoutzeit von 600 Sekunden für eine bedarfsgesteuerte Aufgabe oder von 3600 Sekunden für eine geplante Aufgabe ausgeführt werden. Wenn die Timeoutzeit überschritten wird, wird nur eine Teilmenge der Tags und Manifeste gelöscht. Um sicherzustellen, dass eine umfangreiche Bereinigung abgeschlossen wird, übergeben Sie den Parameter --timeout
, um den Wert zu erhöhen.
Beispielsweise wird mit der folgenden bedarfsgesteuerten Aufgabe eine Timeoutzeit von 3600 Sekunden (1 Stunde) festgelegt:
# 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
Beispiel: Geplantes Bereinigen mehrerer Repositorys in einer Registrierung
In diesem Beispiel wird die Verwendung von acr purge
zum regelmäßigen bereinigen mehrerer Repositorys in einer Registrierung durchlaufen. Angenommen, Sie verfügen über eine Entwicklungspipeline, mit der Bilder in Repositorys samples/devimage1
und samples/devimage2
per Push übertragen werden. Sie importieren regelmäßig Sie Entwicklungsimages in ein Produktionsrepository für Ihre Bereitstellungen, sodass Sie die Entwicklungsimages nicht mehr benötigen. Wöchentlich bereinigen Sie die Repositorys samples/devimage1
und samples/devimage2
, um die Arbeit der nächsten Woche vorzubereiten.
Anzeigen einer Vorschau der Bereinigung
Vor dem Löschen von Daten empfiehlt es sich, eine bedarfsgesteuerte Bereinigungsaufgabe mithilfe des-Parameters --dry-run
durchzuführen. Diese Option gestattet es Ihnen, die Tags und Manifeste anzuzeigen, die vom Befehl bereinigt werden, ohne Daten zu entfernen.
Im folgenden Beispiel wählt der Filter in jedem Repository alle Tags aus. Der Parameter --ago 0d
gleicht Images jeden Alters in den Repositorys ab, die den Filtern entsprechen. Ändern Sie die Auswahlkriterien nach Bedarf für Ihr Szenario. Der Parameter --untagged
gibt an, dass zusätzlich zu Tags auch Manifeste gelöscht werden sollen. Der Containerbefehl wird mithilfe einer Umgebungsvariablen an den Befehl az acr run übergeben.
# 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
Überprüfen Sie die Befehlsausgabe, um die Tags und Manifeste anzuzeigen, die den Auswahlparametern entsprechen. Da der Befehl mit --dry-run
ausgeführt wird, werden keine Daten gelöscht.
Beispielausgabe:
[...]
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
[...]
Planen der Bereinigung
Nachdem Sie den Trockenlauf überprüft haben, erstellen Sie eine geplante Aufgabe, um die Bereinigung zu automatisieren. Im folgenden Beispiel wird eine wöchentliche Aufgabe für Sonntag um 1:00 UTC geplant, um den vorherigen Bereinigungsbefehl auszuführen:
# 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
Führen Sie den Befehl az acr task show aus, um zu sehen, ob der Timertrigger konfiguriert ist.
Nächste Schritte
Weitere Informationen zu weiteren Optionen zum Löschen von Imagedaten in Azure Container Registry.
Weitere Informationen zum Speichern von Images finden Sie unter Containerimagespeicher in Azure Container Registry.