Importare immagini del contenitore in un registro contenitori

È possibile importare (copiare) facilmente immagini del contenitore in un registro Azure Container senza usare comandi di Docker. Ad esempio, è possibile importare immagini da un registro di sviluppo in un registro di produzione oppure copiare immagini di base da un registro pubblico.

Registro Azure Container gestisce diversi scenari comuni per copiare immagini e altri elementi da un registro esistente:

  • Importare immagini da un registro pubblico

  • Importare immagini o artefatti OCI, inclusi i grafici Helm 3 da un altro registro Azure Container, nella stessa sottoscrizione o in un tenant di Azure diverso

  • Importazione da un registro contenitori privato non di Azure

L'importazione di immagini in un registro Azure Container offre i vantaggi seguenti rispetto all'uso dei comandi dell'interfaccia della riga di comando di Docker:

  • Poiché l'ambiente client non richiede un'installazione docker locale, importare qualsiasi immagine del contenitore, indipendentemente dal tipo di sistema operativo supportato.

  • Quando si importano immagini multiarchitettura (ad esempio immagini ufficiali di Docker), vengono copiate le immagini di tutte le architetture e le piattaforme specificate nell'elenco di manifesti.

  • L'accesso al Registro di sistema di destinazione non deve usare l'endpoint pubblico del Registro di sistema.

Importante

  • L'importazione di immagini richiede il supporto del Registro di sistema esterno RFC 7233. È consigliabile usare un registro che supporti gli intervalli RFC 7233 usando il comando az acr import con l'URI del Registro di sistema per evitare errori.

Limiti

  • Il numero massimo di manifesti per un'immagine importata è 50.
  • La dimensione massima del livello per un'immagine importata da un registro pubblico è 2 GiB.

Per importare immagini del contenitore seguendo le procedure di questo articolo, è necessario eseguire l'interfaccia della riga di comando di Azure in Azure Cloud Shell o localmente (si consiglia la versione 2.0.55 o una versione successiva). Eseguire az --version per trovare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.

Nota

Se occorre distribuire immagini del contenitore identiche tra più aree di Azure, Registro Azure Container supporta anche la replica geografica. Replicando geograficamente un registro (livello di servizio Premium necessario), è possibile gestire più aree con nomi di immagine e tag identici da un singolo registro.

Importante

Le modifiche apportate all'importazione di immagini tra due registri contenitori di Azure sono state introdotte a partire da gennaio 2021:

  • L'importazione da o verso un registro Azure Container con restrizioni di rete richiede che il registro con restrizioni consenta l'accesso da parte di servizi attendibili per ignorare la rete. Per impostazione predefinita, l'impostazione è abilitata, consentendo l'importazione. Se l'impostazione non è abilitata in un registro appena creato con un endpoint privato o con regole del firewall del Registro di sistema, l'importazione avrà esito negativo.
  • In un registro Azure Container con restrizioni di rete esistente usato come origine o destinazione di importazione, l'abilitazione di questa funzionalità di sicurezza di rete è facoltativa ma consigliata.

Prerequisiti

Se non si ha già un registro Azure Container, crearne uno. Per la procedura, vedere Avvio rapido: Creare un registro contenitori privato usando l'interfaccia della riga di comando di Azure.

Per importare un'immagine in un Registro Azure Container, l'identità deve disporre delle autorizzazioni di scrittura per il Registro di sistema di destinazione (almeno il ruolo Collaboratore o un ruolo personalizzato che consente l'azione importImage). Vedere Ruoli e autorizzazioni di Registro Azure Container.

Importazione da un registro pubblico

Importante

Per eseguire l'importazione da un registro pubblico a un registro Azure Container con restrizioni di rete, è necessario che il registro con restrizioni consenta l'accesso da parte di servizi attendibili per ignorare la rete. Per impostazione predefinita, l'impostazione è abilitata, consentendo l'importazione. Se l'impostazione non è abilitata in un registro appena creato con un endpoint privato o con regole del firewall del Registro di sistema, l'importazione avrà esito negativo.

Importare immagini dall'hub Docker

Usare ad esempio il comando az acr import per importare l'immagine multiarchitettura hello-world:latest dall'hub Docker in un registro denominato myregistry. Poiché hello-world è un'immagine ufficiale dell'hub Docker, si trova nel repository library predefinito. Includere il nome del repository e, se si vuole, un tag nel valore del parametro dell'immagine --source. Si può anche identificare un'immagine in base al relativo digest del manifesto invece che in base a un tag, in modo da garantire una particolare versione dell'immagine.

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

È possibile verificare che a questa immagine siano associati più manifesti eseguendo il comando az acr manifest list-metadata :

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

Per importare un artefatto in base al digest senza aggiungere un tag:

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

Se si dispone di un account Docker Hub, è consigliabile usare le credenziali durante l'importazione di un'immagine dall'hub Docker. Passare il nome utente dell'hub Docker e la password o un token di accesso personale come parametri a az acr import. L'esempio seguente importa un'immagine pubblica dal repository nell'hub tensorflow Docker usando le credenziali dell'hub Docker:

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>

Importare immagini dal registro contenitori di Microsoft

Ad esempio, importare l'immagine ltsc2019 di Windows Server Core dal windows repository in Registro Contenitori Microsoft.

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

Importare da un registro Azure Container nello stesso tenant di AD

È possibile importare un'immagine da un registro contenitori di Azure nello stesso tenant di AD usando le autorizzazioni integrate di Microsoft Entra.

  • L'identità deve disporre delle autorizzazioni di Microsoft Entra per la lettura dal Registro di sistema di origine (ruolo lettore) e per l'importazione nel Registro di sistema di destinazione (ruolo Collaboratore o ruolo personalizzato che consente l'azione importImage).

  • Il registro può trovarsi nella stessa sottoscrizione di Azure o in una sottoscrizione diversa nello stesso tenant di Active Directory.

  • L'accesso pubblico al Registro di sistema di origine può essere disabilitato. Se l'accesso pubblico è disabilitato, specificare il Registro di sistema di origine in base all'ID risorsa anziché al nome del server di accesso del Registro di sistema.

  • Se il Registro di sistema di origine e/o il Registro di sistema di destinazione dispone di un endpoint privato o regole del firewall del Registro di sistema, assicurarsi che il Registro di sistema con restrizioni consenta ai servizi attendibili di accedere alla rete.

Importare immagini da un registro nella stessa sottoscrizione

Ad esempio, importare l'immagine aci-helloworld:latest dal registro di origine mysourceregistry a myregistry nella stessa sottoscrizione di Azure.

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

L'esempio seguente importa l'immagine aci-helloworld:latest in myregistry da un registro di origine mysourceregistry in cui l'accesso all'endpoint pubblico del Registro di sistema è disabilitato. Specificare l'ID risorsa del registro di origine con il parametro --registry. Si noti che il --source parametro specifica solo il repository di origine e il tag, non il nome del server di accesso del Registro di sistema.

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

L'esempio seguente importa un'immagine in base al digest del manifesto (hash SHA-256, rappresentato come sha256:...) anziché in base a un tag:

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

Importare immagini da un registro in un'altra sottoscrizione

Nota

Per importare un'immagine da un registro a un altro, i registri di origine e di destinazione devono assicurarsi che entrambe le aree siano registrate per Registro Azure Container (ACR) nei provider di risorse della sottoscrizione.

Nell'esempio seguente mysourceregistry è in una sottoscrizione diversa da myregistry nello stesso tenant di Active Directory. Specificare l'ID risorsa del registro di origine con il parametro --registry. Si noti che il --source parametro specifica solo il repository di origine e il tag, non il nome del server di accesso del Registro di sistema.

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

Importare immagini da un registro usando le credenziali dell'entità servizio

Per importare da un Registro di sistema a cui non è possibile accedere usando le autorizzazioni di Active Directory integrate, è possibile usare le credenziali dell'entità servizio (se disponibile) nel Registro di sistema di origine. Specificare l'ID app e la password di un'entità servizio di Active Directory con accesso ACRPull al registro di origine. L'uso di un'entità servizio è utile per i sistemi di compilazione e altri sistemi automatici che devono importare immagini nel registro.

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

Importare da un registro Azure Container in un tenant di Active Directory diverso

Per importare da un registro contenitori di Azure in un tenant Microsoft Entra diverso, specificare il registro di origine in base al nome del server di accesso e specificare le credenziali che consentono l'accesso pull al Registro di sistema.

Importazione tra tenant con nome utente e password

Ad esempio, usare un token e una password con ambito repository o l'ID app e la password di un'entità servizio Active Directory con accesso ACRPull al Registro di sistema di origine.

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

Importazione tra tenant con token di accesso

Per accedere al Registro di sistema di origine usando un'identità nel tenant di origine con autorizzazioni del Registro di sistema, è possibile ottenere un token di accesso:

# 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

Nel tenant di destinazione passare il token di accesso come password al az acr import comando. Il registro di origine viene specificato dal nome del server di accesso. Si noti che in questo comando non è necessario alcun nome utente:

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

Nota

Il cross-tenant non funziona tra i cloud. Anche l'importazione tra tenant su endpoint privati non è supportata.

Importazione da un registro contenitori privato non di Azure

Importare un'immagine da un registro privato non di Azure specificando le credenziali che consentono l'accesso pull al Registro di sistema. Ad esempio, eseguire il pull di un'immagine da un registro privato di Docker:

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

Passaggi successivi

Questo articolo ha illustrato come importare immagini del contenitore in un registro Azure Container da un registro pubblico o da un altro registro privato.

  • Per altre opzioni di importazione di immagini, vedere la documentazione di riferimento sul comando az acr import.
  • L'importazione di immagini consente di spostare il contenuto in un registro contenitori in un'area di Azure diversa, in una sottoscrizione o in un tenant Microsoft Entra. Per altre informazioni, vedere Spostare manualmente un registro contenitori in un'altra area.

  • Informazioni su come disabilitare l'esportazione degli artefatti da un registro contenitori con restrizioni di rete.