Gérer le contenu public à l’aide d’Azure Container Registry

Cet article est une vue d’ensemble des pratiques et des workflows permettant d’utiliser un registre local, tel qu’un registre de conteneurs Azure, afin de conserver des copies de contenu public, telles que les images conteneur dans Docker Hub.

Risques liés au contenu public

Votre environnement peut avoir des dépendances vis-à-vis de contenus publics, par exemple des images conteneur publiques, des charts Helm, des stratégies Open Policy agent (OPA) ou d’autres artefacts. Par exemple, vous pouvez exécuter nginx pour le routage du service ou docker build FROM alpine en extrayant les images directement à partir de Docker Hub ou d’un autre registre public.

En l’absence de contrôles appropriés, le fait d’être dépendant du contenu d’un registre public peut introduire des risques pour vos workflows de développement et de déploiement d’images. Pour atténuer les risques, conservez des copies locales du contenu public lorsque cela est possible. Pour plus d’informations, consultez le blog d’Open Container Initiative.

S’authentifier avec Docker Hub

Dans un premier temps, si vous extrayez des images publiques de Docker Hub dans le cadre d’un workflow de création ou de déploiement, nous vous recommandons de vous authentifier à l’aide d’un compte Docker Hub au lieu de créer une demande de tirage (pull request) anonyme.

Lorsque vous effectuez des demande de tirage (pull request) anonymes fréquentes, vous pouvez voir des erreurs Docker similaires à ERROR: toomanyrequests: Too Many Requests. ou You have reached your pull rate limit. Authentifiez-vous auprès de Docker Hub pour éviter ces erreurs.

Notes

À compter du 2 novembre 2020, des limites de taux de téléchargement s’appliquent aux requêtes anonymes et authentifiées qui sont envoyées à Docker Hub à partir de comptes Docker du plan Gratuit. Ces limites sont appliquées par adresse IP et ID Docker, respectivement.

Lorsque vous estimez le nombre de demandes de tirage (pull request), prenez en compte le fait que, lorsque vous utilisez les services d’un fournisseur de cloud ou que vous travaillez derrière une NAT d’entreprise, plusieurs utilisateurs sont présentés à Docker Hub de manière agrégée comme un sous-ensemble d’adresses IP. L’ajout de l’authentification d’un compte Docker payant aux demandes adressées à Docker Hub évite les éventuelles interruptions de service dues à la limitation du débit.

Pour plus d’informations, consultez la tarification et les abonnements de Docker et les conditions d’utilisation du service de Docker.

Jeton d’accès Docker Hub

Docker Hub prend en charge les jetons d’accès personnels comme alternative à un mot de passe Docker lors de l’authentification auprès de Docker Hub. Les jetons sont recommandés pour les services automatisés qui extraient des images de Docker Hub. Vous pouvez générer plusieurs jetons pour différents utilisateurs ou services et révoquer les jetons quand vous n’en avez plus besoin.

Pour vous authentifier auprès de docker login à l’aide d’un jeton, omettez le mot de passe sur la ligne de commande. Lorsque vous êtes invité à saisir un mot de passe, entrez le jeton à la place. Si vous avez activé l’authentification à 2 facteurs pour votre compte Docker Hub, vous devez utiliser un jeton d’accès personnel lors de la connexion à partir de l’interface de commande de Docker.

S’authentifier à partir des services Azure

Plusieurs services Azure, y compris App Service et Azure Container Instances, prennent en charge l’extraction d’images à partir de registres publics tels que Docker Hub pour les déploiements de conteneurs. Si vous avez besoin de déployer une image à partir de Docker Hub, nous vous recommandons de configurer les paramètres pour vous authentifier à l’aide d’un compte Docker Hub. Exemples :

App Service

  • Source d’image : Hub Docker
  • Accès au référentiel : Privé
  • Connexion : <nom d’utilisateur Docker Hub>
  • Mot de passe : <jeton Docker Hub>

Pour plus d’informations, consultez Extractions authentifiées Docker Hub sur App Service.

Azure Container Instances

  • Source d’image : Docker Hub ou un autre registre
  • Type d’image : Privé
  • Serveur de connexion du registre d’images : docker.io
  • Nom d’utilisateur du registre d’images : <nom d’utilisateur Docker Hub>
  • Mot de passe du registre d’images : <jeton Docker Hub>
  • Image : docker.io/<nom de référentiel> :<étiquette>

Configurer le cache d’artefacts pour consommer du contenu public

La meilleure pratique pour consommer du contenu public est de combiner l’authentification du registre et la fonctionnalité de cache d’artefacts. Vous pouvez utiliser le cache d’artefacts pour mettre en cache vos artefacts de conteneur dans Azure Container Registry, même dans des réseaux privés. L’utilisation du cache d’artefacts vous protège non seulement contre les limites de débit du registre, mais aussi augmente considérablement la fiabilité des tirages quand il est combiné avec ACR géorépliqué pour extraire les artefacts de la région la plus proche de votre ressource Azure. En outre, vous pouvez également utiliser toutes les fonctionnalités de sécurité offertes par ACR, notamment les réseaux privés, la configuration du pare-feu, les principaux de service, etc. Pour obtenir des informations complètes sur l’utilisation de contenus publics avec le cache d’artefacts ACR, consultez le tutoriel Cache d’artefacts.

Importer des images dans un registre de conteneurs Azure

Pour commencer à gérer des copies d’images publiques, vous pouvez créer un registre de conteneurs Azure si vous n’en avez pas déjà un. Créez un registre à l’aide d’Azure CLI, de Portail Azure, d’Azure PowerShell ou d’autres outils.

Comme étape unique recommandée, importez des images de base et d’autres contenus publics dans votre registre de conteneurs Azure. La commande az acr import dans Azure CLI prend en charge l’importation d’images à partir de registres publics, tels que Docker Hub et Microsoft Container Registry, et à partir d’autres registres de conteneurs privés.

az acr import ne nécessite pas d’installation locale de Docker. Vous pouvez l’exécuter avec une installation locale d’Azure CLI ou directement dans Azure Cloud Shell. Elle prend en charge des images de n’importe quel type de système d’exploitation, des images à architectures multiples ou des artefacts OCI tels que les charts Helm.

En fonction des besoins de votre organisation, vous pouvez importer vers un registre dédié ou vers un référentiel dans un registre partagé.

az acr import \
  --name myregistry \
  --source docker.io/library/hello-world:latest \
  --image hello-world:latest \
  --username <Docker Hub username> \
  --password <Docker Hub token>

Mettre à jour les références d’image

Les développeurs d’images d’application doivent s’assurer que leur code fait référence au contenu local sous leur contrôle.

  • Mettez à jour les références d’image pour utiliser le registre privé. Par exemple, mettez à jour une instruction FROM baseimage:v1 dans un Dockerfile pour FROM myregistry.azurecr.io/mybaseimage:v1
  • Configurez les informations d’identification ou un mécanisme d’authentification pour utiliser le registre privé. Le mécanisme exact dépend des outils que vous utilisez pour accéder au registre et de la façon dont vous gérez l’accès des utilisateurs.

Automatiser les mises à jour des images d’application

En plus de l’importation d’images, configurez une tâche Azure Container Registry pour automatiser les versions d’image d’application lorsque les images de base sont mises à jour. Une tâche de génération automatisée peut effectuer le suivi des mises à jour d’image de base et des mises à jour du code source.

Pour obtenir un exemple détaillé, consultez Comment utiliser et gérer le contenu public à l’aide d’Azure Container Registry Tasks.

Notes

Une seule tâche préconfigurée peut régénérer automatiquement chaque image d’application qui fait référence à une image de base dépendante.

Étapes suivantes