Comment utiliser la commande docker login pour s'authentifier auprès des registres

DockerDockerBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, vous apprendrez à vous authentifier auprès des registres Docker en utilisant la commande docker login. Nous aborderons l'authentification auprès de Docker Hub en utilisant la connexion standard basée sur le web, l'authentification auprès d'un registre auto-hébergé avec un nom d'utilisateur et un mot de passe, et la fourniture du mot de passe via STDIN pour les scénarios non interactifs. Cette expérience pratique vous dotera des compétences essentielles pour accéder et gérer en toute sécurité les images dans différents environnements de registre Docker.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/SystemManagementGroup -.-> docker/login("Log into Docker Registry") subgraph Lab Skills docker/pull -.-> lab-555166{{"Comment utiliser la commande docker login pour s'authentifier auprès des registres"}} docker/login -.-> lab-555166{{"Comment utiliser la commande docker login pour s'authentifier auprès des registres"}} end

S'authentifier auprès de Docker Hub en utilisant la connexion basée sur le web

Dans cette étape, vous apprendrez à vous authentifier auprès de Docker Hub en utilisant la méthode de connexion basée sur le web. C'est le moyen le plus courant de vous connecter à Docker Hub et il convient aux sessions interactives.

Docker Hub est un service de registre basé sur le cloud proposé par Docker qui vous permet de stocker et de partager vos images Docker. Pour pousser (push) ou tirer (pull) des images privées, vous devez vous authentifier auprès de Docker Hub.

La commande docker login est utilisée pour s'authentifier auprès d'un registre Docker. Par défaut, elle s'authentifie auprès de Docker Hub.

Ouvrez votre terminal dans l'environnement LabEx. Vous êtes dans le répertoire ~/project.

Pour vous connecter à Docker Hub, exécutez la commande suivante :

docker login

Lorsque vous exécutez cette commande, vous serez invité à entrer votre nom d'utilisateur et votre mot de passe Docker Hub.

Connectez-vous avec votre identifiant Docker pour pousser et tirer des images depuis Docker Hub. Si vous n'avez pas d'identifiant Docker, rendez-vous sur https://hub.docker.com/ pour en créer un.
Nom d'utilisateur : your_docker_username
Mot de passe : your_docker_password

Entrez votre nom d'utilisateur et votre mot de passe Docker Hub lorsque vous y êtes invité. Si l'authentification réussit, vous verrez un message similaire à celui-ci :

ATTENTION ! Votre mot de passe sera stocké sans chiffrement dans /home/labex/.docker/config.json.
Configurez un assistant d'authentification pour supprimer cet avertissement. Voir
https://docs.docker.com/engine/reference/commandline/login/#credential-helpers

Connexion réussie

Ce message indique que vous vous êtes connecté avec succès à Docker Hub. L'avertissement concernant le mot de passe non chiffré est prévu dans ce scénario et peut être ignoré pour ce laboratoire.

Maintenant que vous êtes connecté, vous pouvez tirer des images privées depuis Docker Hub ou pousser vos propres images vers votre dépôt.

Essayons de tirer une image publique pour confirmer que les commandes Docker fonctionnent après la connexion. Nous allons tirer l'image hello-world, qui est une petite image utilisée pour les tests.

docker pull hello-world

Vous devriez voir une sortie indiquant que l'image est en cours de téléchargement et d'extraction :

Utilisation de la balise par défaut : latest
latest: Pulling from library/hello-world
...
Statut : Téléchargement de la nouvelle image pour hello-world:latest
docker.io/library/hello-world:latest

Cela confirme que vous pouvez interagir avec Docker Hub après vous être authentifié.

S'authentifier auprès d'un registre auto-hébergé avec un nom d'utilisateur et un mot de passe

Dans cette étape, vous apprendrez à vous authentifier auprès d'un registre Docker auto-hébergé en utilisant un nom d'utilisateur et un mot de passe. Bien que Docker Hub soit le registre par défaut, vous devrez peut-être interagir avec des registres privés hébergés au sein de votre organisation ou sur un fournisseur de services cloud.

Un registre auto-hébergé est un registre Docker que vous configurez et gérez vous-même, au lieu d'utiliser un service public comme Docker Hub. Cela est souvent fait pour des raisons de sécurité, de conformité ou de performance.

Pour vous authentifier auprès d'un registre auto-hébergé, vous utilisez la même commande docker login, mais vous devez spécifier l'adresse du registre. Le format est docker login <registry_address>.

Pour ce laboratoire, nous allons simuler un registre auto-hébergé. Nous utiliserons une adresse fictive myregistry.local. Dans un scénario réel, il s'agirait du nom de domaine ou de l'adresse IP réelle de votre registre.

Ouvrez votre terminal dans le répertoire ~/project.

Pour vous connecter à notre registre auto-hébergé simulé, exécutez la commande suivante, en remplaçant your_registry_username et your_registry_password par des identifiants hypothétiques que vous utiliseriez pour ce registre :

docker login myregistry.local

Vous serez invité à entrer le nom d'utilisateur et le mot de passe pour le registre myregistry.local :

Connectez-vous avec votre identifiant Docker pour pousser et tirer des images depuis myregistry.local. Si vous n'avez pas d'identifiant Docker, rendez-vous sur https://hub.docker.com/ pour en créer un.
Nom d'utilisateur : your_registry_username
Mot de passe : your_registry_password

Entrez le nom d'utilisateur et le mot de passe hypothétiques. Étant donné que myregistry.local n'est pas un registre réel et fonctionnel dans cet environnement, la connexion échouera probablement avec un message d'erreur indiquant que le registre est inaccessible ou que l'authentification a échoué. Cela est prévu pour cette simulation. L'essentiel est de comprendre la syntaxe de la commande et le processus de spécification d'un registre différent.

Error response from daemon: Get "http://myregistry.local/v2/": dial tcp: lookup myregistry.local on 127.0.0.53:53: no such host

Même si la connexion a échoué car le registre n'existe pas, la syntaxe de la commande docker login <registry_address> est correcte pour tenter de s'authentifier auprès d'un registre auto-hébergé.

Dans un scénario réel avec un registre auto-hébergé fonctionnel, une connexion réussie entraînerait un message "Connexion réussie", et vos identifiants pour ce registre spécifique seraient stockés dans votre fichier de configuration Docker (~/.docker/config.json).

Examinons le fichier de configuration Docker pour voir comment les informations sur le registre sont stockées.

cat ~/.docker/config.json

Vous verrez une structure JSON. Après une connexion réussie à Docker Hub à l'étape précédente, vous devriez voir une entrée pour https://index.docker.io/v1/. Si vous vous étiez connecté avec succès à myregistry.local, vous verriez une entrée supplémentaire pour cette adresse de registre.

{
  "auths": {
    "https://index.docker.io/v1/": {
      "auth": "..."
    }
  },
  "HttpHeaders": {
    "User-Agent": "Docker-Client/..."
  },
  "credsStore": "desktop"
}

La section auths contient les informations d'authentification pour différents registres auxquels vous vous êtes connecté. Chaque clé dans auths est l'adresse du registre, et la valeur contient les détails d'authentification.

Cette étape a démontré comment spécifier l'adresse d'un registre auto-hébergé lors de l'utilisation de docker login.

Fournir le mot de passe via l'entrée standard (STDIN) pour une connexion non interactive

Dans cette étape, vous apprendrez à fournir votre mot de passe pour le registre Docker via l'entrée standard (STDIN). Cette méthode est particulièrement utile dans les scénarios non interactifs, tels que les scripts ou les déploiements automatisés, où vous ne pouvez pas saisir manuellement le mot de passe lorsqu'il vous est demandé.

Lorsque vous utilisez docker login dans un terminal interactif, il vous demande le mot de passe. Cependant, dans les scripts, vous avez besoin d'un moyen de transmettre le mot de passe sans intervention manuelle. Le flag --password-stdin vous permet de lire le mot de passe depuis STDIN.

Note de sécurité importante : Transmettre directement les mots de passe sur la ligne de commande est généralement peu sécurisé car la commande et ses arguments peuvent être visibles dans les listes de processus (ps) ou dans l'historique du shell. Lire le mot de passe depuis STDIN est une approche plus sécurisée pour les scripts car elle évite d'exposer le mot de passe dans ces endroits.

Ouvrez votre terminal dans le répertoire ~/project.

Pour illustrer cela, nous allons simuler une connexion à Docker Hub en utilisant STDIN. Vous aurez besoin de votre nom d'utilisateur et de votre mot de passe Docker Hub.

La structure de la commande consiste à afficher le mot de passe avec echo et à le rediriger vers docker login --username <your_docker_username> --password-stdin.

Remplacez your_docker_username par votre véritable nom d'utilisateur Docker Hub et your_docker_password par votre véritable mot de passe Docker Hub.

echo "your_docker_password" | docker login --username your_docker_username --password-stdin

Après avoir exécuté cette commande, vous devriez voir une sortie similaire à celle-ci, indiquant une connexion réussie :

ATTENTION ! Votre mot de passe sera stocké sans chiffrement dans /home/labex/.docker/config.json.
Configurez un assistant d'authentification pour supprimer cet avertissement. Voir
https://docs.docker.com/engine/reference/commandline/login/#credential-helpers

Connexion réussie

Encore une fois, l'avertissement concernant le mot de passe non chiffré est prévu dans cet environnement de laboratoire.

Cette méthode est essentielle pour automatiser les opérations Docker qui nécessitent une authentification. Par exemple, dans un pipeline CI/CD, vous pouvez stocker vos identifiants Docker Hub sous forme de variables d'environnement et utiliser cette méthode pour vous connecter avant de construire et de pousser des images.

Vous pouvez également utiliser cette méthode pour vous connecter à un registre auto - hébergé en ajoutant l'adresse du registre à la fin de la commande :

echo "your_registry_password" | docker login myregistry.local --username your_registry_username --password-stdin

Comme dans l'étape précédente, cette commande échouera probablement dans ce laboratoire car myregistry.local n'est pas un registre fonctionnel. Cependant, la syntaxe pour fournir le mot de passe via STDIN pour un registre spécifique est correcte.

Cette étape vous a montré comment effectuer une connexion non interactive à un registre Docker en redirigeant le mot de passe vers la commande docker login en utilisant le flag --password-stdin.

Résumé

Dans ce laboratoire, vous avez appris à vous authentifier auprès des registres Docker en utilisant la commande docker login. Vous avez d'abord pratiqué l'authentification auprès de Docker Hub en utilisant la méthode standard de connexion interactive basée sur le web, en fournissant votre nom d'utilisateur et votre mot de passe lorsqu'ils vous ont été demandés. Cela a démontré le processus de base de connexion au registre Docker par défaut.

Vous avez ensuite exploré l'authentification auprès d'un registre auto - hébergé en spécifiant l'URL du registre ainsi qu'un nom d'utilisateur et un mot de passe. Enfin, vous avez appris à fournir le mot de passe via l'entrée standard (STDIN), qui est une méthode plus sécurisée pour les scénarios non interactifs et les scripts, empêchant le mot de passe d'être exposé dans l'historique des commandes ou les journaux. Ces étapes ont couvert différentes méthodes pour sécuriser l'accès aux registres Docker pour pousser et tirer des images.