Eseguire la distribuzione in Istanze di contenitore di Azure da Registro contenitori di AzureDeploy to Azure Container Instances from Azure Container Registry

Registro contenitori di Azure è un registro privato basato su Azure per le immagini del contenitore Docker.The Azure Container Registry is an Azure-based, private registry for your Docker container images. Questo articolo illustra come distribuire in Istanze di contenitore di Azure immagini del contenitore archiviate in un registro contenitori di Azure.This article describes how to deploy container images stored in an Azure container registry to Azure Container Instances.

prerequisitiPrerequisites

Registro contenitori di Azure: per completare i passaggi descritti in questo articolo sono necessari un registro contenitori di Azure e almeno un'immagine del contenitore nel registro.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. Se occorre un registro, vedere Creare un registro di contenitori usando l'interfaccia della riga di comando di Azure.If you need a registry, see Create a container registry using the Azure CLI.

Interfaccia della riga di comando di Azure: gli esempi della riga di comando in questo articolo usano l'interfaccia della riga di comando di Azure e sono formattati per la shell Bash.Azure CLI: The command-line examples in this article use the Azure CLI and are formatted for the Bash shell. È possibile installare l'interfaccia della riga di comando di Azure localmente o usare Azure Cloud Shell.You can install the Azure CLI locally, or use the Azure Cloud Shell.

Configurare l'autenticazione del registroConfigure registry authentication

In qualsiasi scenario di produzione l'accesso a un registro contenitori di Azure deve essere fornito tramite entità servizio.In any production scenario, access to an Azure container registry should be provided by using service principals. Mediante le entità servizio è possibile fornire il controllo degli accessi in base al ruolo alle immagini del contenitore.Service principals allow you to provide role-based access control to your container images. Ad esempio, è possibile configurare un'entità servizio con accesso pull-only a un registro.For example, you can configure a service principal with pull-only access to a registry.

In questa sezione vengono creati un insieme di credenziali delle chiavi di Azure e un'entità servizio e le credenziali dell'entità servizio vengono archiviate nell'insieme.In this section, you create an Azure key vault and a service principal, and store the service principal's credentials in the vault.

Creare un insieme di credenziali delle chiaviCreate key vault

Se non si ha già un insieme di credenziali delle chiavi in Azure Key Vault, crearne uno usando i comandi seguenti nell'interfaccia della riga di comando di Azure.If you don't already have a vault in Azure Key Vault, create one with the Azure CLI using the following commands.

Aggiornare la variabile RES_GROUP con il nome del gruppo di risorse in cui creare l'insieme di credenziali delle chiavi e ACR_NAME con il nome del registro contenitori.Update the RES_GROUP variable with the name of the resource group in which to create the key vault, and ACR_NAME with the name of your container registry. Specificare un nome per il nuovo insieme di credenziali delle chiavi in AKV_NAME.Specify a name for your new key vault in AKV_NAME. Il nome dell'insieme di credenziali deve essere univoco in Azure e avere una lunghezza compresa tra 3 e 24 caratteri alfanumerici, iniziare con una lettera, finire con una lettera o una cifra e non contenere trattini consecutivi.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

Creare un'entità servizio e archiviare le credenzialiCreate service principal and store credentials

A questo punto occorre creare un'entità servizio e archiviarne le credenziali nell'insieme di credenziali delle chiavi.You now need to create a service principal and store its credentials in your key vault.

Il comando seguente usa az ad sp create-for-rbac per creare l'entità servizio e az keyvault secret set per archiviare la password dell'entità servizio nell'insieme di credenziali.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 AKV (the registry *password*)
az keyvault secret set \
  --vault-name $AKV_NAME \
  --name $ACR_NAME-pull-pwd \
  --value $(az ad sp create-for-rbac \
                --name $ACR_NAME-pull \
                --scopes $(az acr show --name $ACR_NAME --query id --output tsv) \
                --role reader \
                --query password \
                --output tsv)

L'argomento --role nel comando precedente configura l'entità servizio con il ruolo lettore, che concede l'accesso di tipo pull-only al registro.The --role argument in the preceding command configures the service principal with the reader role, which grants it pull-only access to the registry. Per concedere l'accesso sia push che pull, impostare l'argomento --role su collaboratore.To grant both push and pull access, change the --role argument to contributor.

Quindi, archiviare nell'insieme di credenziali il valore appId dell'entità servizio, che corrisponde al nome utente passato a Registro contenitori di Azure per l'autenticazione.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 AKV (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)

È stato creato un insieme di credenziali delle chiavi di Azure e vi sono stati archiviati due segreti:You've created an Azure Key Vault and stored two secrets in it:

  • $ACR_NAME-pull-usr: ID dell'entità servizio, da usare come nome utente del registro contenitori.$ACR_NAME-pull-usr: The service principal ID, for use as the container registry username.
  • $ACR_NAME-pull-pwd: password dell'entità servizio, da usare come password del registro contenitori.$ACR_NAME-pull-pwd: The service principal password, for use as the container registry password.

Ora è possibile fare riferimento a questi segreti per nome quando gli utenti o le applicazioni e i servizi eseguono il pull di immagini dal registro.You can now reference these secrets by name when you or your applications and services pull images from the registry.

Distribuire un contenitore con l'interfaccia della riga di comando di AzureDeploy container with Azure CLI

Ora che le credenziali dell'entità servizio sono archiviate nei segreti di Azure Key Vault, le applicazioni e i servizi possono usarle per accedere al registro privato.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.

Eseguire il comando az container create seguente per distribuire un'istanza di contenitore.Execute the following az container create command to deploy a container instance. Il comando usa le credenziali dell'entità servizio archiviate in Azure Key Vault per eseguire l'autenticazione con il registro contenitori e presuppone che sia stato precedentemente eseguito il push dell'immagine aci-helloworld nel registro.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. Aggiornare il valore di --image se si vuole usare un'immagine del registro diversa.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_NAME.azurecr.io/aci-helloworld:v1 \
    --registry-login-server $ACR_NAME.azurecr.io \
    --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

Il valore di --dns-name-label deve essere univoco in Azure, quindi il comando precedente accoda un numero casuale all'etichetta del nome DNS del contenitore.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. L'output del comando visualizza il nome di dominio completo (FQDN) del contenitore, ad esempio:The output from the command displays the container's fully qualified domain name (FQDN), for example:

$ az container create --name aci-demo --resource-group $RES_GROUP --image $ACR_NAME.azurecr.io/aci-helloworld:v1 --registry-login-server $ACR_NAME.azurecr.io --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
"aci-demo-25007.eastus.azurecontainer.io"

Una volta avviato il contenitore, è possibile passare al suo FQDN nel browser per verificare che l'applicazione sia correttamente in esecuzione.Once the container has started successfully, you can navigate to its FQDN in your browser to verify the application is running successfully.

Distribuire con un modello di Azure Resource ManagerDeploy with Azure Resource Manager template

È possibile specificare le proprietà di Registro contenitori di Azure in un modello di Azure Resource Manager includendo la proprietà imageRegistryCredentials nella definizione del gruppo di contenitori: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:

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

Per informazioni dettagliate sul riferimento ai segreti di Azure Key Vault in un modello di Resource Manager, vedere Usare Azure Key Vault per passare valori di parametro protetti durante la distribuzione.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.

Distribuire con il portale di AzureDeploy with Azure portal

Se si conservano le immagini del contenitore in Registro contenitori di Azure, è possibile creare facilmente un contenitore in Istanze di contenitore di Azure usando il portale di Azure.If you maintain container images in the Azure Container Registry, you can easily create a container in Azure Container Instances using the Azure portal.

  1. Nel portale di Azure passare al registro contenitori.In the Azure portal, navigate to your container registry.

  2. Selezionare Repository, quindi selezionare il repository da cui si desidera eseguire la distribuzione, fare clic con il pulsante destro del mouse sul tag dell'immagine del contenitore che si vuole distribuire e selezionare Esegui istanza.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.

    "Esegui istanza" nel Registro contenitori di Azure nel portale di Azure

  3. Immettere un nome per il contenitore e un nome per il gruppo di risorse.Enter a name for the container and a name for the resource group. Se si vuole, è anche possibile cambiare i valori predefiniti.You can also change the default values if you wish.

    Menu di creazione per Istanze di contenitore di Azure

  4. Al termine della distribuzione, è possibile passare al gruppo di contenitori dal riquadro delle notifiche per trovare l'indirizzo IP e le altre proprietà.Once the deployment completes, you can navigate to the container group from the notifications pane to find its IP address and other properties.

    Visualizzazione dei dettagli del gruppo di contenitori in Istanze di contenitore di Azure

Passaggi successiviNext steps

Per altre informazioni sull'autenticazione con Registro contenitori di Azure, vedere Eseguire l'autenticazione con un registro contenitori Docker privato.For more information about Azure Container Registry authentication, see Authenticate with an Azure container registry.