Importer des images conteneur dans un registre de conteneurs

Vous pouvez facilement importer (copier) des images conteneur dans un registre de conteneurs Azure sans recourir à des commandes Docker. Vous pouvez par exemple importer des images d’un registre de développement dans un registre de production ou copier des images de base à partir d’un registre public.

Azure Container Registry gère un grand nombre de scénarios courants de copie d’images et d’autre artefacts à partir d’un registre existant :

  • Importer des images à partir d’un registre public

  • Importer des images ou des artefacts OCI dont les graphiques Helm 3 à partir d’un autre registre de conteneurs Azure, dans le même abonnement ou locataire Azure ou dans un autre

  • Importer à partir d’un registre de conteneurs privé non-Azure

L’importation d’images dans un registre de conteneurs Azure présente les avantages suivants par rapport à l’utilisation de commandes de l’interface CLI Docker :

  • Si votre environnement client ne nécessite pas d’installation Docker locale, vous pouvez importer n’importe quelle image conteneur, quel que soit le type de système d’exploitation pris en charge.

  • Si vous importez des images multi-architecture (notamment des images Docker officielles), les images pour toutes les architectures et plateformes spécifiées dans la liste de manifestes sont copiées.

  • Si vous avez accès au Registre cible, vous n’avez pas besoin du point de terminaison public du Registre.

Important

  • L’importation d’images nécessite une prise en charge du Registre externe RFC 7233. Nous vous recommandons l’utilisation d’un registre qui prend en charge les plages RFC 7233, tout en utilisant la commande « az acr import » avec l’URI du Registre pour éviter les échecs.

Limites

  • Le nombre maximum de manifestes pour une image importée est de 50.
  • La taille maximale des couches pour une image importée d'un registre public est de 2 Gio.

Pour importer des images conteneur, cet article nécessite que vous exécutiez l’interface Azure CLI dans Azure Cloud Shell ou localement (version 2.0.55 ou ultérieure recommandée). Exécutez az --version pour trouver la version. Si vous devez installer ou mettre à niveau, voir Installer Azure CLI.

Notes

Si vous avez besoin de distribuer des images conteneur identiques dans plusieurs régions Azure, Azure Container Registry prend également en charge la géoréplication. En géoréplicant un registre (niveau de service Premium requis), vous pouvez servir plusieurs régions avec des noms d’image et d’étiquette identiques à partir d’un seul registre.

Important

Les modifications apportées à l’importation d’image entre deux registres de conteneurs Azure ont été introduites à partir du mois de janvier 2021 :

  • L’importation vers ou depuis un registre de conteneurs Azure avec accès restreint au réseau requiert que le registre restreint autorise l’accès par des services de confiance pour contourner le réseau. Par défaut, le paramètre est activé, ce qui permet l’importation. Si le paramètre n’est pas activé dans un registre nouvellement créé avec un point de terminaison privé ou avec des règles de pare-feu de registre, l’importation échoue.
  • Dans un registre de conteneurs Azure avec accès restreint au réseau existant utilisé comme source d’importation ou cible, l’activation de cette fonctionnalité de sécurité réseau est facultative, mais recommandée.

Prérequis

Si vous ne disposez pas d’un registre de conteneurs Azure, créez-en un. Pour connaître les étapes à suivre, voir Démarrage rapide : Créer un registre de conteneurs privé avec Azure CLI.

Pour importer une image dans un registre de conteneurs Azure, votre identité doit avoir des autorisations en écriture sur le registre cible (au moins le rôle Contributeur ou un rôle personnalisé permettant l’action importimage). Consultez Autorisations et rôles Azure Container Registry.

Importer à partir d’un registre public

Important

Pour importer un registre public vers un registre de conteneurs Azure limité au réseau, le registre doit uniquement autoriser l’accès des services approuvés afin de contourner le réseau. Par défaut, le paramètre est activé et autorise donc l’importation. Si le paramètre n’est pas activé dans un registre nouvellement créé avec un point de terminaison privé ou avec des règles de pare-feu de registre, l’importation échoue.

Importer à partir de Docker Hub

Par exemple, utilisez la commande az acr import pour importer l’image hello-world:latest multi-architecture à partir de Docker Hub dans un registre nommé myregistry. hello-world étant une image officielle de Docker Hub, cette image se trouve dans le dépôt library par défaut. Indiquez le nom du dépôt et éventuellement une étiquette dans la valeur du paramètre d’image --source. (Vous pouvez également identifier une image par code de hachage de manifeste et non par étiquette, ce qui garantit l’obtention d’une version particulière.)

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

Vous pouvez vérifier si plusieurs manifestes sont associés à cette image, en exécutant la commande az acr manifest list-metadata

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

Pour importer un artefact par digest sans ajouter d’étiquette :

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

Si vous avez un compte Docker Hub, nous vous recommandons d’utiliser les informations d’identification lors de l’importation d’une image à partir de Docker Hub. Transmettez le nom d’utilisateur et le mot de passe du Docker Hub ou un jeton d’accès personnel en tant que paramètres à az acr import. L’exemple suivant importe une image publique à partir du référentiel tensorflow dans Docker Hub, en utilisant les informations d'identification de Docker Hub :

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>

Importer à partir du registre de conteneurs Microsoft

Par exemple, importez l’ltsc2019image Windows Server Core à partir du référentiel windows dans le registre de conteneurs Microsoft.

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

Importer à partir d'un registre de conteneurs Azure situé dans le même locataire AD

Vous pouvez importer une image à partir d’un registre de conteneurs Azure situé dans le même locataire AD grâce aux autorisations Microsoft Entra intégrées.

  • Votre identité doit disposer d’autorisations Microsoft Entra pour lire à partir du registre source (rôle Lecteur) et pour écrire dans le registre cible (rôle Contributeur ou rôle personnalisé permettant l’action importImage).

  • Le registre peut se trouver dans un abonnement Azure identique ou différent dans le même locataire Active Directory.

  • L’accès public au registre source est désactivé. Si l’accès public est désactivé, spécifiez le registre source par ID de ressource plutôt que par nom de serveur de connexion au registre.

  • Le registre source et/ou le registre cible avec un point de terminaison privé ou des règles de pare-feu de registre doivent s’assurer que le registre restreint permet aux services approuvés d’accéder au réseau.

Importer à partir d’un registre dans le même abonnement

Par exemple, importez l’image aci-helloworld:latest à partir d’un registre source mysourceregistry dans myregistry dans le même abonnement Azure.

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

L’exemple suivant importe l’image aci-helloworld:latest vers myregistry à partir d’un registre source mysourceregistry dans lequel l’accès au point de terminaison public du registre est désactivé. Indiquez l’ID de ressource du registre source avec le paramètre --registry. Notez que le paramètre --source spécifie uniquement le dépôt source et l’étiquette, pas le nom du serveur de connexion au registre.

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’exemple suivant importe une image par code de hachage de manifeste (hachage SHA-256, représenté sous la forme sha256:...), et non par étiquette :

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

Importer à partir d’un registre dans un abonnement différent

Remarque

Pour importer une image d’un registre à un autre, les registres source et cible doivent s’assurer que les deux régions sont inscrites à Azure Container Registry (ACR) sous les fournisseurs de ressources de l’abonnement.

Dans l’exemple suivant, mysourceregistry est dans un autre abonnement que myregistry, dans le même locataire Active Directory. Indiquez l’ID de ressource du registre source avec le paramètre --registry. Notez que le paramètre --source spécifie uniquement le dépôt source et l’étiquette, pas le nom du serveur de connexion au registre.

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

Importer à partir d’un registre à l’aide des informations d’identification du principal de service

Pour importer à partir d'un registre auquel vous n'avez pas accès avec les autorisations Active Directory intégrées, vous pouvez utiliser les informations d'identification du principal de service (si celles-ci sont disponibles) pour le registre source. Indiquez l’appID et le mot de passe d’un principal de service Active Directory disposant d’un accès ACRPull au registre source. L’utilisation d’un principal de service est utile pour les systèmes de génération et d’autres systèmes sans assistance qui doivent importer des images dans votre registre.

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

Importer à partir d'un registre de conteneurs Azure situé dans un autre locataire AD

Pour importer à partir d’un registre de conteneurs Azure situé dans un autre locataire Microsoft Entra, spécifiez le registre source par nom de serveur de connexion et entrez des informations d’identification permettant un accès par extraction (pull) au registre.

  • L’importation entre locataires sur le registre désactivé d’accès public n’est pas prise en charge.

Importation entre locataires avec nom d’utilisateur et mot de passe

Par exemple, utilisez un jeton délimité par le référentiel et un mot de passe, ou l'appID et le mot de passe d'un principal de service Active Directory disposant d'un accès ACRPull au registre source.

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

Importation entre locataires avec jeton d’accès

  • L’importation entre locataires sur le registre désactivé d’accès public n’est pas prise en charge.

Pour accéder au registre source à l’aide d’une identité dans le locataire source qui dispose d’autorisations de registre, vous pouvez obtenir un jeton d’accès :

# 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

Dans le locataire cible, transmettez le jeton d’accès en tant que mot de passe à la commande az acr import. Le registre source spécifie le nom du serveur de connexion. Notez qu’aucun nom d’utilisateur n’est nécessaire dans cette commande :

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

Importer à partir d’un registre de conteneurs privé non-Azure

Importez une image à partir d'un registre privé non Azure en spécifiant des informations d'identification permettant un accès par extraction au registre. Par exemple, tirez (pull) une image à partir d’un registre Docker privé :

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

Étapes suivantes

Dans cet article, vous avez appris à importer des images conteneur dans un registre de conteneurs Azure à partir d’un registre public ou d’un autre registre privé.

  • Pour accéder à des options d’importation d’image supplémentaires, consultez les informations de référence sur la commande az acr import.