Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Azure Container Registry est un service de registre privé permettant de créer, de stocker et de gérer des images conteneurs et des artefacts connexes. Dans ce guide de démarrage rapide, vous créez une instance de registre de conteneurs Azure avec Azure CLI. Vous allez ensuite utiliser des commandes Docker pour envoyer (push) une image conteneur dans le registre, puis tirer (pull) et exécuter l’image à partir de votre registre.
Ce guide de démarrage rapide vous demande d’exécuter Azure CLI (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.
Docker doit également être installé en local. Docker fournit des packages qui le configurent facilement sur n’importe quel système macOS, Windows ou Linux.
Étant donné qu’Azure Cloud Shell n’inclut pas tous les composants Docker requis (par exemple, le démon dockerd), vous ne pouvez pas l’utiliser pour ce démarrage rapide.
Créer un groupe de ressources
Créez un groupe de ressources avec la commande az group create. Un groupe de ressources Azure est un conteneur logique dans lequel les ressources Azure sont déployées et gérées.
L’exemple suivant crée un groupe de ressources nommé myResourceGroup à l’emplacement eastus.
az group create --name myResourceGroup --location eastus
Configurer des paramètres pour un registre de conteneurs
Dans ce guide de démarrage rapide, vous créez un registre Standard , qui est suffisant pour la plupart des flux de travail Azure Container Registry. Pour plus d’informations sur les niveaux de service disponibles, consultez Niveaux de service des registres de conteneurs.
Créez une instance ACR à l’aide de la commande az acr create. Le nom de registre doit être unique dans Azure, et contenir de 5 à 50 caractères alphanumériques en minuscules. Dans l’exemple suivant, mycontainerregistry est utilisé. Mettez à jour le nom de façon à utiliser une valeur unique.
Configurer l’option DNL (Domain Name Label)
La fonctionnalité Domain Name Label (DNL) renforce la sécurité en empêchant les attaques de prise de contrôle de sous-domaines des noms DNS du registre. Ces attaques se produisent lorsqu’un registre est supprimé et qu’une autre entité réutilise le même nom de registre, ce qui peut entraîner l’extraction de références en aval à partir du registre recréé par l’autre entité.
DNL résout ce problème en ajoutant un hachage unique au nom DNS du registre. Cela garantit que même si le même nom de Registre est réutilisé par une autre entité, les noms DNS diffèrent en raison du hachage unique. Vous éviterez ainsi que vos références en aval ne pointent par inadvertance vers le registre recréé par l’autre entité.
Lors de la création d’un registre à partir de la commande az acr create , vous pouvez spécifier l’indicateur --dnl-scope facultatif et choisir parmi les options disponibles :
-
Unsecure: crée le nom DNS as-is, en fonction du nom du Registre (par exemple).contosoacrregistry.azurecr.ioCette option n’inclut pas la protection DNL. -
TenantReuse: Ajoute un hachage unique basé sur le client et le nom du registre, ce qui garantit que le nom DNS est unique au sein du client. -
SubscriptionReuse: ajoute un hachage unique basé sur l’abonnement, le locataire et le nom du Registre, ce qui garantit que le nom DNS est unique dans l’abonnement. -
ResourceGroupReuse: ajoute un hachage unique basé sur le groupe de ressources, l’abonnement, le locataire et le nom du Registre, ce qui garantit que le nom DNS est unique dans le groupe de ressources. -
NoReuse: génère un nom DNS unique avec un hachage unique chaque fois que le Registre est créé, quel que soit d’autres facteurs, ce qui garantit que le nom DNS est toujours unique.
Remarque
Configuration immuable : l’étendue DNL sélectionnée lors de la création du Registre est permanente et ne peut pas être modifiée ultérieurement. Cela garantit un comportement DNS cohérent et empêche les interruptions des références en aval.
Implications du nom DNS des options DNL
Format du nom DNS : pour toutes les options compatibles DNL, sauf Unsecureque le nom DNS suit le format registryname-hash.azurecr.io, où le tiret (-) sert de délimiteur de hachage. Pour éviter les conflits, tiret (-) n’est pas autorisé dans le nom du registre. Par exemple, un registre nommé contosoacrregistry avec l’étendue TenantReuse DNL aura un nom DNS comme contosoacrregistry-e7ggejfuhzhgedc8.azurecr.io.
Références en aval : le nom DNS peut différer du nom du Registre, nécessitant des mises à jour dans des fichiers en aval tels que Dockerfiles, Kubernetes YAML et des graphiques Helm pour refléter le nom DNS complet avec le hachage DNL. Par exemple, si vous souhaitez que votre fichier Dockerfile en aval référence un registre nommé contosoacrregistry avec le scope TenantReuse DNL, vous devez mettre à jour la référence à contosoacrregistry-e7ggejfuhzhgedc8.azurecr.io dans votre fichier Dockerfile en aval.
Configurer le mode d’autorisations d’attribution de rôle
Vous pouvez éventuellement utiliser le --role-assignment-mode paramètre pour spécifier le mode d’attribution de rôle du Registre.
Cette option détermine comment le contrôle d’accès en fonction du rôle Microsoft Entra (RBAC) et les attributions de rôles sont gérés pour le Registre, notamment l’utilisation du contrôle d’accès en fonction de l’attribut Microsoft Entra (ABAC) pour les autorisations du référentiel Microsoft Entra.
Spécifiez rbac-abac ce paramètre pour conserver les attributions de rôles Microsoft Entra RBAC standard, tout en appliquant éventuellement des conditions Microsoft Entra ABAC pour un contrôle d’accès précis au niveau du référentiel.
Pour plus d’informations sur cette option, consultez le contrôle d’accès en fonction de l’attribut Microsoft Entra (ABAC) pour obtenir des autorisations de dépôt.
Créer un registre de conteneur
az acr create --resource-group myResourceGroup \
--name mycontainerregistry --sku Standard \
--role-assignment-mode 'rbac-abac' \
--dnl-scope TenantReuse
Une fois le registre créé, la sortie ressemble à ce qui suit :
{
"adminUserEnabled": false,
"creationDate": "2023-01-08T22:32:13.175925+00:00",
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/mycontainerregistry",
"location": "eastus",
"loginServer": "mycontainerregistry-e7ggejfuhzhgedc8.azurecr.io",
"name": "mycontainerregistry",
"provisioningState": "Succeeded",
"resourceGroup": "myResourceGroup",
"sku": {
"name": "Standard",
"tier": "Standard"
},
"status": null,
"storageAccount": null,
"tags": {},
"type": "Microsoft.ContainerRegistry/registries",
"roleAssignmentMode": "AbacRepositoryPermissions",
"autoGeneratedDomainNameLabelScope": "TenantReuse"
}
Notez loginServer dans la sortie, qui est le nom complet du registre (tout en minuscules). Dans la suite et fin du présent guide de démarrage rapide, <registry-name> est un espace réservé pour le nom du registre de conteneurs et <login-server> est un espace réservé pour le nom du serveur de connexion du registre.
Conseil
Dans ce guide de démarrage rapide, vous créez un registre Standard , qui est suffisant pour la plupart des flux de travail Azure Container Registry. Pour augmenter le débit de stockage et d’image et les fonctionnalités telles que la connexion à l’aide d’un point de terminaison privé, l’option de plan tarifaire Premium (SKU) est disponible. Pour plus d’informations sur les niveaux de service (SKUs), consultez les fonctionnalités et limites des SKUs Azure Container Registry.
Se connecter au registre
Avant d’envoyer (push) et de tirer (pull) des images conteneur, vous devez vous connecter au registre. Pour ce faire, utilisez la commande az acr login. Spécifiez seulement le nom du registre au moment de la connexion avec Azure CLI. N’utilisez pas le nom complet du serveur de connexion.
az acr login --name <registry-name>
Exemple :
az acr login --name mycontainerregistry
Une fois l’opération terminée, la commande retourne un message Login Succeeded.
Envoyer l’image au registre
Pour envoyer une image dans un registre Azure Container Registry, vous devez tout d’abord disposer d’une image. Si vous n’avez pas encore d’images conteneur locales, exécutez la commande docker pull suivante pour tirer (pull) une image publique existante. Pour cet exemple, tirez l’image hello-world à partir de Microsoft Container Registry.
docker pull mcr.microsoft.com/hello-world
Avant d’envoyer (push) une image vers le registre, vous devez la marquer à l'aide de la balise docker en indiquant le nom complet de votre serveur de connexion au registre.
- Le format de nom du serveur de connexion pour les registres protégés par l’étiquette de nom de domaine (DNL) avec un hachage de nom DNS unique inclus est
mycontainerregistry-abc123.azurecr.io. - Le format de nom du serveur de connexion pour les registres créés avec l’option
UnsecureDNL estmycontainerregistry.azurecr.io.
Par exemple, si vous créez un registre avec l'étendue Tenant Reuse DNL, le serveur de connexion peut ressembler à mycontainerregistry-abc123.azurecr.io, avec un hachage dans le nom DNS. Si vous créez un registre avec l’option Unsecure DNL, le serveur de connexion ressemble à mycontainerregistry.azurecr.io, sans le hachage.
Étiquetez l’image à l’aide de la commande docker tag avec le serveur de connexion de votre registre. Pour ce guide de démarrage rapide, étiquetez l’image hello-world avec v1.
Exemple de commande pour étiqueter une image pour un registre protégé par DNL :
docker tag mcr.microsoft.com/hello-world mycontainerregistry-abc123.azurecr.io/hello-world:v1
Exemple de commande pour étiqueter une image pour un registre non-DNL :
docker tag mcr.microsoft.com/hello-world mycontainerregistry.azurecr.io/hello-world:v1
Pour finir, utilisez la commande docker push pour envoyer l’image vers l’instance du registre. Remplacez <login-server> par le nom du serveur de connexion de votre instance de registre. Cet exemple crée le référentiel hello-world qui contient l’image hello-world:v1.
docker push <login-server>/hello-world:v1
Après avoir envoyé l’image à votre registre de conteneurs, supprimez l’image hello-world:v1 de votre environnement Docker local à l’aide de la commande docker rmi . Cette commande ne supprime pas l’image du référentiel hello-world dans votre registre de conteneurs Azure.
docker rmi <login-server>/hello-world:v1
Répertorier les images conteneur
L’exemple suivant liste les référentiels de votre registre :
az acr repository list --name <registry-name> --output table
Sortie :
Result
----------------
hello-world
L’exemple suivant liste les balises existantes sur le dépôt hello-world.
az acr repository show-tags --name <registry-name> --repository hello-world --output table
Sortie :
Result
--------
v1
Exécuter l’image à partir du registre
Vous pouvez à présent extraire (pull) et exécuter l’image conteneur hello-world:v1 à partir de votre registre de conteneurs à l’aide de docker run :
docker run <login-server>/hello-world:v1
Exemple de sortie :
Unable to find image 'mycontainerregistry.azurecr.io/hello-world:v1' locally
v1: Pulling from hello-world
Digest: sha256:662dd8e65ef7ccf13f417962c2f77567d3b132f12c95909de6c85ac3c326a345
Status: Downloaded newer image for mycontainerregistry.azurecr.io/hello-world:v1
Hello from Docker!
This message shows that your installation appears to be working correctly.
[...]
Nettoyer les ressources
Vous pouvez utiliser la commande az group delete pour supprimer le groupe de ressources, le registre de conteneurs et les images conteneur stockées à cet endroit quand vous n’en avez plus besoin.
az group delete --name myResourceGroup
Étapes suivantes
- En savoir plus sur les registres, les dépôts et les artefacts.
- Découvrez comment envoyer et extraire des images vers votre registre de conteneurs à l’aide de l’interface CLI Docker.