Importare immagini del contenitore in un registro contenitori

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

Registro Azure Container supporta molti scenari comuni di copia di immagini e altri artefatti 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 di Azure, nello stesso tenant di Azure o tra sottoscrizioni e tenant diversi.

  • Importare immagini da un registro di contenitori privato non di Azure.

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

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

  • Se 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.

  • Se si ha accesso al registro di destinazione, non è necessario l'endpoint pubblico del registro.

Importante

L'importazione di immagini richiede il supporto del Registro di sistema esterno RFC 7233. Per evitare errori, usare un Registro di sistema che supporta gli intervalli RFC 7233 durante l'uso del az acr import comando con l'URI del Registro di sistema.

Limitazioni

  • Il numero massimo di manifesti per un'immagine importata è 50.

  • Registro Azure Container supporta l'importazione di immagini da un'ampia gamma di registri di origine tra provider di servizi cloud. Se l'origine di importazione è un Registro Azure Container, è possibile importare solo dall'area principale del Registro Azure Container di origine. Gli endpoint regionali dell'ACR di origine non sono supportati come origini per l'importazione. Specificare l'endpoint globale del Registro Azure Container di origine quando si esegue l'importazione da un Registro Azure Container di origine. Inoltre, un'importazione scrive sempre il contenuto nell'area principale del Registro Azure Container downstream. Consultare le informazioni di riferimento sull'endpoint di Registro Azure Container.

Per importare immagini del contenitore, eseguire il interfaccia della riga di comando di Azure in Azure Cloud Shell o in locale.

Note

Se è necessario distribuire immagini di contenitori identiche in più aree di Azure, Registro Azure Container supporta anche la replica geografica. La replica geografica di un registro (è necessario un livello di servizio Premium) consente di servire più aree con nomi di immagine e di tag identici da un unico registro.

Importante

Per importare da o verso un registro contenitori con restrizioni di rete Azure, il registro con restrizioni deve consentire l'accesso da parte di servizi attendibili per ignorare la rete. Per impostazione predefinita, l'impostazione è abilitata, quindi l'importazione funziona. Se si crea un registro con un endpoint privato o con regole del firewall del Registro di sistema e non si abilita l'impostazione, l'importazione ha esito negativo.

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, necessario che l'identità disponga delle autorizzazioni per attivare le importazioni nel registro di destinazione (ruolo Container Registry Data Importer and Data Reader). Consulta Panoramica delle autorizzazioni e dei ruoli di Entra in Registro Azure Container.

Importare immagini del contenitore da un registro pubblico

Importante

Per importare da un registro pubblico a un registro contenitori con restrizioni di rete Azure, il registro con restrizioni deve consentire l'accesso da parte di servizi attendibili per ignorare la rete. Per impostazione predefinita, questa impostazione è abilitata, quindi l'importazione funziona. Se si disabilita questa impostazione in un registro appena creato con un endpoint privato o con regole del firewall del Registro di sistema, l'importazione ha esito negativo.

Importare immagini del contenitore da Docker Hub

Ad esempio, usare il comando az acr import per importare l'immagine a più architetture 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 all'hash 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, usare le credenziali durante l'importazione di un'immagine da Docker Hub. 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 tensorflow nel Docker Hub usando le relative credenziali:

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 del contenitore da registro contenitori Microsoft

Ad esempio, importare l'immagine di Windows Server Core ltsc2022 dal repository windows nel registro contenitori di Microsoft.

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

Importare immagini di contenitore da un registro contenitori di Azure nello stesso tenant Microsoft Entra

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

  • L'identità deve avere le autorizzazioni per visualizzare ed eseguire il pull di immagini, tag e riferimenti OCI dal registro di origine (ruolo assegnato Container Registry Data Importer and Data Reader sul registro di origine).

  • La tua identità deve avere anche le autorizzazioni per leggere le immagini e avviare le importazioni nel registro di destinazione (Container Registry Data Importer and Data Reader ruolo assegnato nel registro di destinazione).

  • Il registro può trovarsi nella stessa o in una diversa sottoscrizione di Azure, nello stesso tenant Microsoft Entra.

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

  • Il Registro di sistema di origine e/o il Registro di sistema di destinazione con un endpoint privato o regole del firewall del Registro di sistema devono garantire che il Registro di sistema con restrizioni consenta ai servizi attendibili di accedere alla rete.

Importare immagini del contenitore da un registro nella stessa sottoscrizione

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

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 parametro --source specifica solo il tag e il repository di origine, non il nome del server di accesso al registro.

Per usare l'Identity Authentication Microsoft Entra per il registro di origine, includere il flag --registry <source-registry-resource-id>.

az acr import \
  --name myregistry \
  --source aci-helloworld:latest \
  --image aci-helloworld:latest \
  --registry /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/sourceResourceGroup/providers/Microsoft.ContainerRegistry/registries/mysourceregistry

Importare immagini del contenitore da un registro in una sottoscrizione diversa

Note

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

Nell'esempio seguente mysourceregistry si trova in una sottoscrizione diversa da myregistry nello stesso tenant. Specificare l'ID della risorsa del registro di origine usando il parametro --registry. 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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/sourceResourceGroup/providers/Microsoft.ContainerRegistry/registries/mysourceregistry

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

Per eseguire l'importazione da un Registro di sistema a cui non è possibile accedere usando le autorizzazioni di Active Directory integrate, usare le credenziali dell'entità servizio (se disponibile) per il Registro di sistema di origine. Immettere l'appID e la password di un'entità servizio Microsoft Entra che disponga dell'assegnazione di ruolo corretta per accedere al registro di origine.

  • Per le entità servizio di Microsoft Entra, assicurarsi che sia assegnato Container Registry Repository Reader (per i registri abilitati per ABAC) oppure AcrPull (per i registri non ABAC).

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/sourcerepo:tag \
  --image targetimage:tag \
  --username <SP_App_ID> \
  --password <SP_Passwd>

Importare immagini del contenitore da un registro contenitori Azure in un tenant diverso

Per importare immagini da un registro contenitori Azure in un tenant di 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.

L'importazione tra tenant non è supportata con un registro con accesso pubblico disabilitato.

Importazione tra tenant con nome utente e password

Ad esempio, usare un token e una password con ambito in un repository non Microsoft Entra oppure l'ID app e la password di un'entità servizio di Microsoft Entra con assegnazioni di ruolo corrette al registro di origine.

  • Per le entità servizio di Microsoft Entra, assicurarsi che nel registro di origine sia assegnato Container Registry Repository Reader (per i registri con abilitazione per ABAC) oppure AcrPull (per i registri non ABAC).
az acr import \
  --name myregistry \
  --source sourceregistry.azurecr.io/sourcerepo:tag \
  --image targetimage:tag \
  --username <SP_App_ID> \
  --password <SP_Passwd>

Importazione tra tenant con token di accesso

Per accedere al registro di origine tramite un'identità nel tenant di origine che dispone delle autorizzazioni per il registro, 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 comando az acr import. Il Registro di sistema di origine specifica il nome del server di accesso. In questo comando non è necessario alcun nome utente:

az acr import \
  --name myregistry \
  --source sourceregistry.azurecr.io/sourcerepo:tag \
  --image targetimage:tag \
  --password ($token|ConvertFrom-Json).accessToken

Importare immagini del contenitore da un registro contenitori privato non Azure

Per importare un'immagine da un registro privato non Azure, specificare credenziali che consentano l'accesso pull al registro. 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>

Risolvere i problemi relativi alle importazioni di immagini del contenitore

Se viene visualizzato un errore durante l'importazione di un'immagine, vedere la tabella seguente per altre informazioni.

Messaggio d'errore Spiegazione
The remote server may not be RFC 7233 compliant La specifica di distribuzione consente la forma di intestazione dell'intervallo di Range: bytes=<start>-<end>. Tuttavia, il server remoto potrebbe non essere conforme a RFC 7233.
Unexpected response status code Un codice di stato della risposta imprevisto è stato recuperato dal repository di origine durante l'esecuzione di una query di intervallo.
Unexpected length of body in response La lunghezza del contenuto ricevuto non corrisponde alle dimensioni previste. La dimensione prevista è determinata dalla dimensione del blob e dall'intestazione Range.

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.