Importieren von Containerimages in eine Containerregistrierung

Sie können Containerimages einfach in eine Azure-Containerregistrierung importieren (kopieren), ohne Docker-Befehle verwenden zu müssen. Sie können beispielsweise Images aus einer Entwicklungsregistrierung in eine Produktionsregistrierung importieren oder Basisimages aus einer öffentlichen Registrierung kopieren.

Azure Container Registry ermöglicht einige allgemeine Szenarien zum Kopieren von Images und anderer Artefakte aus einer vorhandenen Registrierung:

  • Importieren von Images aus einer öffentlichen Registrierung

  • Importieren von Images oder OCI-Artefakten einschließlich Helm 3-Diagrammen aus einer anderen Azure Container Registry-Instanz in demselben oder einem anderen Azure-Abonnement oder -Mandanten

  • Importieren aus einer Azure-fremden privaten Containerregistrierung

Der Imageimport in eine Azure-Containerregistrierung bietet gegenüber der Verwendung von Docker CLI-Befehlen die folgenden Vorteile:

  • Für Ihre Clientumgebung ist keine lokale Docker-Installation erforderlich. Daher können Sie unabhängig vom unterstützten Betriebssystemtyp beliebige Containerimages importieren.

  • Wenn Sie Images mit mehreren Architekturen (etwa offizielle Docker-Images) importieren, werden Images für alle Architekturen und Plattformen kopiert, die in der Manifestliste angegeben sind.

  • Der Zugriff auf die Zielregistrierung muss nicht über den öffentlichen Endpunkt der Registrierung erfolgen.

Wichtig

  • Für das Importieren von Images ist die Unterstützung von RFC 7233 für die externe Registrierung erforderlich. Es wird empfohlen, eine Registrierung zu verwenden, die RFC 7233-Bereiche unterstützt, während Sie den Befehl „az acr import” mit dem Registrierungs-URI verwenden, um Fehler zu vermeiden.

Einschränkungen

  • Die maximale Anzahl von Manifesten für ein importiertes Image beträgt 50.
  • Die maximale Größe der Ebene für ein aus einer öffentlichen Registrierung importiertes Image beträgt 2 GiB.

Damit Sie Containerimages importieren können, muss für diesen Artikel die Azure-Befehlszeilenschnittstelle in Azure Cloud Shell oder lokal (Version 2.0.55 oder höhere Version empfohlen) ausgeführt werden. 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.

Hinweis

Azure Container Registry unterstützt darüber hinaus die Georeplikation, falls Sie identische Containerimages auf mehrere Azure-Regionen verteilen müssen. Durch die Georeplikation einer Registrierung (Premium-Dienstebene erforderlich) können Sie in mehreren Regionen identische Image- und Tagnamen aus einer einzelnen Registrierung bereitstellen.

Wichtig

Änderungen am Imageimport zwischen zwei Azure Container Registry-Instanzen zum Januar 2021:

  • Für den Import in eine Azure Container Registry-Instanz mit Netzwerkeinschränkungen oder aus dieser muss die eingeschränkte Registrierung das Umgehen des Netzwerks für den Zugriff durch vertrauenswürdige Dienste erlauben. Standardmäßig ist die Einstellung aktiviert und ermöglicht den Import. Wenn die Einstellung in einer neu erstellten Registrierung mit einem privaten Endpunkt oder mit Firewallregeln für die Registrierung nicht aktiviert ist, tritt beim Import ein Fehler auf.
  • Bei einer vorhandenen Azure Container Registry-Instanz mit Netzwerkeinschränkungen, die als Importquelle oder -ziel verwendet wird, ist die Aktivierung dieser Netzwerksicherheitsfunktion optional, wird jedoch empfohlen.

Voraussetzungen

Wenn Sie nicht bereits über eine Azure-Containerregistrierung verfügen, erstellen Sie eine Registrierung. Die hierzu erforderlichen Schritte finden Sie unter Schnellstart: Erstellen einer privaten Containerregistrierung mit der Azure CLI.

Um ein Image in eine Azure-Containerregistrierung importieren zu können, muss Ihre Identität über Schreibberechtigungen für die Zielregistrierung (mindestens die Rolle „Mitwirkender“ oder eine benutzerdefinierte Rolle, die die importImage-Aktion zulässt) verfügen. Informationen hierzu finden Sie unter Azure Container Registry: Rollen und Berechtigungen.

Importieren aus einer öffentlichen Registrierung

Wichtig

Zum Importieren aus einer öffentlichen Registrierung in eine Azure-Containerregistrierung mit Netzwerkeinschränkungen muss die eingeschränkte Registrierung den Zugriff durch vertrauenswürdige Dienste zulassen, um das Netzwerk zu umgehen. Standardmäßig ist die Einstellung aktiviert und ermöglicht den Import. Wenn die Einstellung in einer neu erstellten Registrierung mit einem privaten Endpunkt oder mit Firewallregeln für die Registrierung nicht aktiviert ist, tritt beim Import ein Fehler auf.

Importieren aus Docker Hub

Verwenden Sie beispielsweise den Befehl az acr import, um das Image hello-world:latest mit mehreren Architekturen aus Docker Hub in eine Registrierung namens myregistry zu importieren. hello-world ist ein offizielles Image von Docker Hub und befindet sich daher im library-Standardrepository. Fügen Sie den Repositorynamen und optional ein Tag in den Wert des Imageparameters --source ein. (Optional können Sie ein Image anhand seines Manifest-Digest anstelle seines Tags bestimmen. Damit wird eine bestimmte Version eines Images garantiert.)

az acr import \
  --name myregistry \
  --source docker.io/library/hello-world:latest \
  --image hello-world:latest

Sie können überprüfen, ob mehrere Manifeste mit diesem Image verbunden sind, indem Sie den Befehl az acr manifest list-metadata ausführen:

az acr manifest list-metadata \
  --name hello-world \
  --registry myregistry

So importieren Sie ein Artefakte nach Digest ohne Hinzufügen eines Tags

az acr import \
   --name myregistry \
   --source docker.io/library/hello-world@sha256:abc123 \
   --repository hello-world

Wenn Sie ein Docker Hub-Konto haben, sollten Sie beim Importieren eines Images aus Docker Hub diese Anmeldeinformationen verwenden. Übergeben Sie den Docker Hub-Benutzernamen mit dem zugehörigen Kennwort oder ein persönliches Zugriffstoken als Parameter an az acr import. Im folgenden Beispiel wird ein öffentliches Image aus dem Repository tensorflow mithilfe von Docker Hub-Anmeldeinformationen in Docker Hub importiert:

az acr import \
  --name myregistry \
  --source docker.io/tensorflow/tensorflow:latest-gpu \
  --image tensorflow:latest-gpu
  --username <Docker Hub user name>
  --password <Docker Hub token>

Importieren aus der Microsoft-Containerregistrierung

Importieren Sie beispielsweise das Windows Server Core-Image ltsc2019 aus dem Repository windows in die Microsoft Container Registry.

az acr import \
--name myregistry \
--source mcr.microsoft.com/windows/servercore:ltsc2019 \
--image servercore:ltsc2019

Importieren von Images aus einer Azure-Containerregistrierung im selben AD-Mandanten

Mithilfe von integrierten Microsoft Entra-Berechtigungen können Sie ein Image aus einer Azure-Containerregistrierung im selben AD-Mandanten importieren.

  • Ihre Identität muss über Microsoft Entra-Berechtigungen zum Lesen aus der Quellregistrierung (Rolle „Leser“) und zum Importieren in die Zielregistrierung verfügen (Rolle „Mitwirkender“ oder eine benutzerdefinierte Rolle, welche die importImage-Aktion zulässt).

  • Die Registrierung kann sich in dem gleichen oder einem anderen Azure-Abonnement im gleichen Active Directory-Mandanten befinden.

  • Der öffentliche Zugriff auf die Quellregistrierung kann deaktiviert werden. Wenn der öffentliche Zugriff deaktiviert ist, geben Sie die Quellregistrierung nach Ressourcen-ID anstelle des Servernamens der Registrierungsanmeldung an.

  • Wenn die Quell- oder Zielregistrierung über einen privaten Endpunkt verfügt oder Registrierungsfirewallregeln angewandt werden, stellen Sie sicher, dass die eingeschränkte Registrierung den Zugriff auf das Netzwerk für vertrauenswürdige Dienste zulässt.

Importieren aus einer Registrierung im gleichen Abonnement

Importieren Sie beispielsweise das Image aci-helloworld:latest aus der Quellregistrierung mysourceregistry in myregistry im gleichen Azure-Abonnement.

az acr import \
  --name myregistry \
  --source mysourceregistry.azurecr.io/aci-helloworld:latest \
  --image aci-helloworld:latest

Das folgende Beispiel importiert das aci-helloworld:latest-Image in myregistry aus einer Quellregistrierung mysourceregistry, in der der Zugriff auf den öffentlichen Endpunkt der Registrierung deaktiviert ist. Geben Sie die Ressourcen-ID der Quellregistrierung mit dem Parameter --registry an. Beachten Sie, dass der Parameter --source nur das Quellrepository und Tag, aber nicht den Namen des Anmeldeservers für die Registrierung angibt.

az acr import \
  --name myregistry \
  --source aci-helloworld:latest \
  --image aci-helloworld:latest \
  --registry /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/sourceResourceGroup/providers/Microsoft.ContainerRegistry/registries/mysourceregistry

Das folgende Beispiel importiert ein Image nicht anhand des Tags, sondern anhand des Manifest-Digest (SHA-256-Hash, dargestellt als sha256:...):

az acr import \
  --name myregistry \
  --source mysourceregistry.azurecr.io/aci-helloworld@sha256:123456abcdefg

Importieren aus einer Registrierung in einem anderen Abonnement

Hinweis

Um ein Image aus einer Registrierung in eine andere zu importieren, müssen die Quell- und Zielregistrierungen sicherstellen, dass beide Regionen für die Azure Container Registry (ACR) unter den Ressourcenanbietern des Abonnements registriert sind.

Im folgenden Beispiel befindet sich mysourceregistry im gleichen Active Directory-Mandanten in einem anderen Abonnement als myregistry. Geben Sie die Ressourcen-ID der Quellregistrierung mit dem Parameter --registry an. Beachten Sie, dass der Parameter --source nur das Quellrepository und Tag, aber nicht den Namen des Anmeldeservers für die Registrierung angibt.

az acr import \
  --name myregistry \
  --source aci-helloworld:latest \
  --image aci-hello-world:latest \
  --registry /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/sourceResourceGroup/providers/Microsoft.ContainerRegistry/registries/mysourceregistry

Importieren aus einer Registrierung mit Dienstprinzipal-Anmeldeinformationen

Sie können für den Import aus einer Registrierung, auf die Sie nicht mit integrierten Active Directory-Berechtigungen zugreifen können, Anmeldeinformationen für einen Dienstprinzipal für die Quellregistrierung verwenden (sofern verfügbar). Geben Sie die App-ID und das Kennwort eines Active Directory-Dienstprinzipals an, der über ACRPull-Zugriff auf die Quellregistrierung verfügt. Die Verwendung eines Dienstprinzipals empfiehlt sich für Buildsysteme und andere unbeaufsichtigte Systeme, die Images in Ihre Registrierung importieren müssen.

az acr import \
  --name myregistry \
  --source sourceregistry.azurecr.io/sourcerrepo:tag \
  --image targetimage:tag \
  --username <SP_App_ID> \
  --password <SP_Passwd>

Importieren von Images aus einer Azure-Containerregistrierung in einem anderen AD-Mandanten

Um Images aus einer Azure-Containerregistrierung in einem anderen Microsoft Entra-Mandanten zu importieren, geben Sie die Quellregistrierung nach Anmeldeservernamen an und stellen die Anmeldeinformationen bereit, die den Pullzugriff auf die Registrierung zulassen.

Mandantenübergreifender Import mit Benutzername und Kennwort

Verwenden Sie z. B. ein Token mit Repositorygültigkeitsbereich und ein Kennwort oder die App-ID und das Kennwort für einen Active Directory-Dienstprinzipal, der über ACRPull-Zugriff auf die Quellregistrierung verfügt.

az acr import \
  --name myregistry \
  --source sourceregistry.azurecr.io/sourcerrepo:tag \
  --image targetimage:tag \
  --username <SP_App_ID> \
  --password <SP_Passwd>

Mandantenübergreifender Import mit Zugriffstoken

Um mithilfe einer Identität im Quellmandanten, die über Registrierungsberechtigungen verfügt, auf die Quellregistrierung zuzugreifen, können Sie ein Zugriffstoken abrufen:

# Login to Azure CLI with the identity, for example a user-assigned managed identity
az login --identity --username <identity_ID>

# Get access token returned by `az account get-access-token`
az account get-access-token

Übergeben Sie im Zielmandanten das Zugriffstoken als Kennwort an den Befehl az acr import. Die Quellregistrierung wird über den Namen des Anmeldeservers angegeben. Beachten Sie, dass in diesem Befehl kein Benutzername erforderlich ist:

az acr import \
  --name myregistry \
  --source sourceregistry.azurecr.io/sourcerrepo:tag \
  --image targetimage:tag \
  --password <access-token>

Hinweis

Mandantenübergreifendes Arbeiten funktioniert nicht über die Clouds hinweg. Der mandantenübergreifende Import über private Endpunkte wird ebenfalls nicht unterstützt.

Importieren aus einer Azure-fremden privaten Containerregistrierung

Importieren Sie ein Image aus einer privaten Registrierung außerhalb von Azure, indem Sie Anmeldeinformationen angeben, die den Pullzugriff auf die Registrierung ermöglichen. Rufen Sie beispielsweise ein Image per Pull aus einer privaten Docker-Registrierung ab:

az acr import \
  --name myregistry \
  --source docker.io/sourcerepo/sourceimage:tag \
  --image sourceimage:tag \
  --username <username> \
  --password <password>

Nächste Schritte

In diesem Artikel haben Sie erfahren, wie Sie Containerimages aus einer öffentlichen Registrierung oder einer anderen privaten Registrierung in eine Azure-Containerregistrierung importieren.

  • Informationen zu weiteren Optionen beim Importieren von Images finden Sie in der Befehlsreferenz für az acr import.