Bereitstellen in Azure Container Instances aus Azure Container RegistryDeploy to Azure Container Instances from Azure Container Registry

Azure Container Registry ist ein verwalteter Containerregistrierungsdienst auf Azure-Basis zum Speichern privater Docker-Containerimages.Azure Container Registry is an Azure-based, managed container registry service used to store private Docker container images. In diesem Artikel wird beschrieben, wie Containerimages, die in einer Azure Container Registry-Instanz gespeichert sind, beim Bereitstellen in Azure Container Instances gepullt werden.This article describes how to pull container images stored in an Azure container registry when deploying to Azure Container Instances. Eine empfohlene Vorgehensweise zum Konfigurieren des Registrierungszugriffs besteht darin, einen Azure Active Directory-Dienstprinzipal und ein Kennwort zu erstellen und die Anmeldeinformationen in einem Azure-Schlüsseltresor zu speichern.A recommended way to configure registry access is to create an Azure Active Directory service principal and password, and store the login credentials in an Azure key vault.

VoraussetzungenPrerequisites

Azure Container Registry : Sie benötigen eine Azure-Containerregistrierung, die mindestens ein Containerimage enthält, um die Schritte in diesem Artikel auszuführen.Azure container registry : You need an Azure container registry--and at least one container image in the registry--to complete the steps in this article. Falls Sie eine Registrierung benötigen, siehe Erstellen einer Containerregistrierung mit der Azure-Befehlszeilenschnittstelle (CLI).If you need a registry, see Create a container registry using the Azure CLI.

Azure CLI : Die Befehlszeilenbeispiele in diesem Artikel verwenden die Azure CLI und sind für die Bash-Shell formatiert.Azure CLI : The command-line examples in this article use the Azure CLI and are formatted for the Bash shell. Sie können die Azure CLI lokal installieren oder die Azure Cloud Shell nutzen.You can install the Azure CLI locally, or use the Azure Cloud Shell.

EinschränkungenLimitations

  • Sie können sich nicht bei Azure Container Registry authentifizieren, um während der Containergruppenbereitstellung Images mithilfe einer verwalteten Identität zu pullen, die in derselben Containergruppe konfiguriert ist.You can't authenticate to Azure Container Registry to pull images during container group deployment by using a managed identity configured in the same container group.
  • Sie können Images nicht aus Azure Container Registry abrufen, die zu diesem Zeitpunkt in einem Azure Virtual Network bereitgestellt ist.You can't pull images from Azure Container Registry deployed into an Azure Virtual Network at this time.

Konfigurieren der Authentifizierung der RegistrierungConfigure registry authentication

In einem Produktionsszenario, in dem Sie den Zugriff auf „monitorlose“ Dienste und Anwendungen bereitstellen, wird empfohlen, den Registrierungszugriff mithilfe eines Dienstprinzipals zu konfigurieren.In a production scenario where you provide access to "headless" services and applications, it's recommended to configure registry access by using a service principal. Ein Dienstprinzipal ermöglicht es Ihnen, rollenbasierte Zugriffssteuerung in Azure (Azure RBAC) für Ihre Containerimages bereitzustellen.A service principal allows you to provide Azure role-based access control (Azure RBAC) to your container images. Beispielsweise können Sie einen Dienstprinzipal mit ausschließlichem Pullzugriff auf eine Registrierung konfigurieren.For example, you can configure a service principal with pull-only access to a registry.

Azure Container Registry stellt zusätzliche Authentifizierungsoptionen bereit.Azure Container Registry provides additional authentication options.

Im folgenden Abschnitt erstellen Sie einen Azure-Schlüsseltresor und Dienstprinzipal und speichern die Anmeldeinformationen des Dienstprinzipals im Tresor.In the following section, you create an Azure key vault and a service principal, and store the service principal's credentials in the vault.

Erstellen eines SchlüsseltresorsCreate key vault

Wenn Sie noch keinen Tresor in Azure Key Vault haben, erstellen Sie einen mithilfe der Azure CLI und folgenden Befehle.If you don't already have a vault in Azure Key Vault, create one with the Azure CLI using the following commands.

Aktualisieren Sie die Variable RES_GROUP mit dem Namen einer vorhandenen Ressourcengruppe, in der der Schlüsselspeicher erstellt werden soll, und ACR_NAME mit dem Namen Ihrer Containerregistrierung.Update the RES_GROUP variable with the name of an existing resource group in which to create the key vault, and ACR_NAME with the name of your container registry. Aus Gründen der Übersichtlichkeit wird bei Befehlen in diesem Artikel davon ausgegangen, dass Ihre Registrierung, der Schlüsseltresor und die Containerinstanzen alle in derselben Ressourcengruppe erstellt wurden.For brevity, commands in this article assume that your registry, key vault, and container instances are all created in the same resource group.

Geben Sie in AKV_NAME einen Namen für Ihren neuen Schlüsseltresor ein.Specify a name for your new key vault in AKV_NAME. Der Tresorname muss in Azure eindeutig sein und 3-24 alphanumerische Zeichen umfassen. Er muss mit einem Buchstaben beginnen, mit einem Buchstaben oder einer Ziffer enden und darf keine aufeinanderfolgenden Bindestriche enthalten.The vault name must be unique within Azure and must be 3-24 alphanumeric characters in length, begin with a letter, end with a letter or digit, and cannot contain consecutive hyphens.

RES_GROUP=myresourcegroup # Resource Group name
ACR_NAME=myregistry       # Azure Container Registry registry name
AKV_NAME=mykeyvault       # Azure Key Vault vault name

az keyvault create -g $RES_GROUP -n $AKV_NAME

Erstellen eines Dienstprinzipals und Speichern von AnmeldeinformationenCreate service principal and store credentials

Erstellen Sie nun einen Dienstprinzipal, und speichern Sie seine Anmeldeinformationen in Ihrem Schlüsselspeicher.Now create a service principal and store its credentials in your key vault.

Der folgende Befehl verwendet az ad sp create-for-rbac zum Erstellen des Dienstprinzipals und az keyvault secret set zum Speichern des Kennworts für den Dienstprinzipal im Tresor.The following command uses az ad sp create-for-rbac to create the service principal, and az keyvault secret set to store the service principal's password in the vault.

# Create service principal, store its password in vault (the registry *password*)
az keyvault secret set \
  --vault-name $AKV_NAME \
  --name $ACR_NAME-pull-pwd \
  --value $(az ad sp create-for-rbac \
                --name http://$ACR_NAME-pull \
                --scopes $(az acr show --name $ACR_NAME --query id --output tsv) \
                --role acrpull \
                --query password \
                --output tsv)

Das Argument --role im vorhergehenden Befehl konfiguriert den Dienstprinzipal mit der Rolle acrpull , die ihm ausschließlich Pullzugriff auf die Registrierung gewährt.The --role argument in the preceding command configures the service principal with the acrpull role, which grants it pull-only access to the registry. Um sowohl Push- als auch Pullzugriff zu gewähren, ändern Sie das Argument --role in acrpush .To grant both push and pull access, change the --role argument to acrpush .

Speichern Sie als Nächstes die appId des Dienstprinzipals im Tresor. Dies ist der Benutzername , den Sie zur Authentifizierung an Azure Container Registry übergeben.Next, store the service principal's appId in the vault, which is the username you pass to Azure Container Registry for authentication.

# Store service principal ID in vault (the registry *username*)
az keyvault secret set \
    --vault-name $AKV_NAME \
    --name $ACR_NAME-pull-usr \
    --value $(az ad sp show --id http://$ACR_NAME-pull --query appId --output tsv)

Sie haben einen Azure Key Vault erstellt und in ihm zwei Geheimnisse gespeichert:You've created an Azure key vault and stored two secrets in it:

  • $ACR_NAME-pull-usr: Die Dienstprinzipal-ID für die Verwendung als Benutzername für die Containerregistrierung.$ACR_NAME-pull-usr: The service principal ID, for use as the container registry username .
  • $ACR_NAME-pull-pwd: Das Kennwort des Dienstprinzipals für die Verwendung als Kennwort für die Containerregistrierung.$ACR_NAME-pull-pwd: The service principal password, for use as the container registry password .

Sie können nun auf diese Geheimnisse anhand des Namens verweisen, wenn Sie oder Ihre Anwendungen und Dienste Images per Pull aus der Registrierung abrufen.You can now reference these secrets by name when you or your applications and services pull images from the registry.

Bereitstellen des Containers mit der Azure CLIDeploy container with Azure CLI

Jetzt, da die Anmeldeinformationen des Dienstprinzials in Azure Key Vault-Geheimnissen gespeichert sind, können Ihre Anwendungen und Dienste diese verwenden, um auf Ihre private Registrierung zuzugreifen.Now that the service principal credentials are stored in Azure Key Vault secrets, your applications and services can use them to access your private registry.

Rufen Sie zuerst den Namen des Anmeldeservers der Registrierung mit dem Befehl az acr show auf.First get the registry's login server name by using the az acr show command. Der Name des Anmeldeservers besteht aus Kleinbuchstaben und ähnelt myregistry.azurecr.io.The login server name is all lowercase and similar to myregistry.azurecr.io.

ACR_LOGIN_SERVER=$(az acr show --name $ACR_NAME --resource-group $RES_GROUP --query "loginServer" --output tsv)

Führen Sie den folgenden az container create-Befehl aus, um eine Containerinstanz bereitzustellen.Execute the following az container create command to deploy a container instance. Der Befehl verwendet die in Azure Key Vault gespeicherten Anmeldeinformationen des Dienstprinzials, um sich bei Ihrer Containerregistrierung zu authentifizieren, und geht davon aus, dass Sie zuvor das Image aci-helloworld per Push in Ihre Registrierung verschoben haben.The command uses the service principal's credentials stored in Azure Key Vault to authenticate to your container registry, and assumes you've previously pushed the aci-helloworld image to your registry. Aktualisieren Sie den Wert --image, wenn Sie ein anderes Image aus Ihrer Registrierung verwenden möchten.Update the --image value if you'd like to use a different image from your registry.

az container create \
    --name aci-demo \
    --resource-group $RES_GROUP \
    --image $ACR_LOGIN_SERVER/aci-helloworld:v1 \
    --registry-login-server $ACR_LOGIN_SERVER \
    --registry-username $(az keyvault secret show --vault-name $AKV_NAME -n $ACR_NAME-pull-usr --query value -o tsv) \
    --registry-password $(az keyvault secret show --vault-name $AKV_NAME -n $ACR_NAME-pull-pwd --query value -o tsv) \
    --dns-name-label aci-demo-$RANDOM \
    --query ipAddress.fqdn

Der Wert --dns-name-label muss innerhalb von Azure eindeutig sein, weshalb der vorherige Befehl eine Zufallszahl an die DNS-Namenskennung des Containers anfügt.The --dns-name-label value must be unique within Azure, so the preceding command appends a random number to the container's DNS name label. Die Ausgabe des Befehls zeigt den vollqualifizierten Domänennamen (FQDN) des Containers. Beispiel:The output from the command displays the container's fully qualified domain name (FQDN), for example:

"aci-demo-25007.eastus.azurecontainer.io"

Nachdem der Container erfolgreich gestartet wurde, können Sie in Ihrem Browser zu seinem FQDN navigieren, um zu überprüfen, ob die Anwendung erfolgreich ausgeführt wird.Once the container has started successfully, you can navigate to its FQDN in your browser to verify the application is running successfully.

Bereitstellen mit einer Azure Resource Manager-VorlageDeploy with Azure Resource Manager template

Sie können die Eigenschaften von Azure Container Registry in einer Azure Resource Manager-Vorlage angeben, indem Sie die imageRegistryCredentials-Eigenschaft in die Definition der Containergruppe einbeziehen.You can specify the properties of your Azure container registry in an Azure Resource Manager template by including the imageRegistryCredentials property in the container group definition. Sie können z. B. die Registrierungsanmeldeinformationen direkt angeben:For example, you can specify the registry credentials directly:

[...]
"imageRegistryCredentials": [
  {
    "server": "imageRegistryLoginServer",
    "username": "imageRegistryUsername",
    "password": "imageRegistryPassword"
  }
]
[...]

Die vollständigen Containergruppeneinstellungen finden Sie in der Resource Manager-Vorlagenreferenz.For complete container group settings, see the Resource Manager template reference.

Weitere Informationen zum Verweisen auf Azure Key Vault-Geheimnisse in einer Resource Manager-Vorlage finden Sie unter Verwenden von Azure Key Vault zum Übergeben eines sicheren Parameterwerts während der Bereitstellung.For details on referencing Azure Key Vault secrets in a Resource Manager template, see Use Azure Key Vault to pass secure parameter value during deployment.

Bereitstellen über das Azure-PortalDeploy with Azure portal

Wenn Sie Containerimages in einer Azure Container Registry verwalten, können Sie im Azure-Portal in Azure Container Instances auf einfache Weise einen Container erstellen.If you maintain container images in an Azure container registry, you can easily create a container in Azure Container Instances using the Azure portal. Wenn Sie das Portal verwenden, um eine Containerinstanz aus einer Container Registry bereitzustellen, müssen Sie das Administratorkonto der Registrierung aktivieren.When using the portal to deploy a container instance from a container registry, you must enable the registry's admin account. Das Administratorkonto ist dafür ausgelegt, dass ein einzelner Benutzer auf die Registrierung zugreift (hauptsächlich für Testzwecke).The admin account is designed for a single user to access the registry, mainly for testing purposes.

  1. Navigieren Sie im Azure-Portal wieder zu Ihrer Containerregistrierung.In the Azure portal, navigate to your container registry.

  2. Um sicherzustellen, dass das Administratorkonto aktiviert ist, wählen Sie zunächst Zugriffsschlüssel und dann unter Administratorbenutzer die Option Aktivieren aus.To confirm that the admin account is enabled, select Access keys , and under Admin user select Enable .

  3. Klicken Sie auf Repositorys , und wählen Sie dann das Repository aus, über das die Bereitstellung erfolgen soll. Klicken Sie mit der rechten Maustaste auf das Tag für das Containerimage, das Sie bereitstellen möchten, und klicken Sie auf Instanz ausführen .Select Repositories , then select the repository that you want to deploy from, right-click the tag for the container image you want to deploy, and select Run instance .

    „Instanz ausführen“ in Azure Container Registry im Azure-Portal

  4. Geben Sie einen Namen für den Container und einen Namen für die Ressourcengruppe ein.Enter a name for the container and a name for the resource group. Sie können den Standardwert auch bei Bedarf ändern.You can also change the default values if you wish.

    Erstellmenü für Azure Container Instances

  5. Sobald die Bereitstellung abgeschlossen wurde, können Sie vom Benachrichtigungsbereich aus zur Containergruppe navigieren, um die IP-Adresse und andere Eigenschaften zu sehen.Once the deployment completes, you can navigate to the container group from the notifications pane to find its IP address and other properties.

    Detailansicht für eine Containergruppe in Azure Container Instances

Nächste SchritteNext steps

Weitere Informationen zur Azure Container Registry-Authentifizierung finden Sie unter Authentifizieren bei einer Azure-Containerregistrierung.For more information about Azure Container Registry authentication, see Authenticate with an Azure container registry.