3.2 Push vers un Registre d'images Docker (Docker Hub)
Apprendre à pousser des images Docker vers un registre (Docker Hub).
Félicitations, vous avez réussi à créer une image Docker optimisée, légère et sécurisée sur votre machine ! Mais pour l'instant, elle est coincée chez vous.
Si vous voulez déployer cette application sur un vrai serveur, la partager avec un collègue, ou l'utiliser plus tard dans un cluster Kubernetes, il va falloir l'envoyer sur internet. C'est ce qu'on appelle "pousser" (push) une image vers un Registry.
Le Registry le plus connu et utilisé par défaut, c'est Docker Hub. Voyons ensemble, étape par étape, comment envoyer notre image fastapi-dev dans les nuages depuis notre terminal.
Étape 1 : Créer son compte Docker Hub
Avant de pouvoir envoyer quoi que ce soit, il vous faut un espace de stockage à vous.
- Rendez-vous sur hub.docker.com.
- Créez un compte gratuitement.
- Notez bien votre nom d'utilisateur (Username), c'est la clé de voûte de tout ce qui va suivre !
Étape 2 : Se connecter depuis le terminal (docker login)
Maintenant que vous existez sur le Docker Hub, il faut dire à votre terminal qui vous êtes. Par défaut, votre terminal n'a pas accès à votre compte.
Ouvrez votre terminal et tapez simplement :
docker login
Docker va alors vous demander deux choses :
- Username : Entrez le nom d'utilisateur que vous venez de créer (attention, pas votre adresse email, bien le pseudo !).
- Password : Entrez votre mot de passe.
💡 L'astuce anti-panique : Quand vous tapez votre mot de passe sous Linux/Mac/Windows dans le terminal, absolument rien ne s'affiche à l'écran, pas même des petites étoiles
***. C'est une sécurité normale ! Tapez votre mot de passe en entier et appuyez sur Entrée.
Si tout se passe bien, vous verrez un beau message vert : Login Succeeded.
Étape 3 : Le Tagging
C'est ici qu'il faut être attentif. Actuellement, l'image sur notre PC s'appelle fastapi-dev:latest.
Si vous tapez docker push fastapi-dev:latest, Docker va vous renvoyer une erreur Access Denied (Accès refusé). Pourquoi ? Parce que Docker ne sait pas où l'envoyer. Sans autre indication, il essaie de l'envoyer à la racine du Docker Hub, ce qui est réservé aux images officielles (comme Python, Ubuntu, etc.).
Pour avoir le droit d'envoyer votre image, elle doit obligatoirement porter votre nom d'utilisateur en préfixe.
La nomenclature exacte d'une image Docker sur le réseau, c'est ça : nom_utilisateur/nom_de_l_image:version
Nous allons donc utiliser la commande docker tag pour "renommer" (ou plutôt cloner avec un nouveau nom) notre image locale.
Imaginons que mon pseudo Docker Hub soit kernellab :
docker tag fastapi-dev:latest kernellab/fastapi-dev:v1.0
Que fait cette commande ?
fastapi-dev:latest: C'est l'image source (celle qu'on a sur notre PC).kernellab/fastapi-dev:v1.0: C'est le nouveau nom de l'image. J'ai ajouté mon pseudo, et j'en ai profité pour changer le taglatestenv1.0(c'est une excellente pratique de numéroter ses versions !).
Si vous tapez docker images maintenant, vous verrez que vous avez les deux images dans votre liste (elles partagent le même identifiant, donc ça ne prend pas plus de place sur le disque).
Étape 4 : Le grand saut (docker push)
Maintenant que notre image porte la bonne étiquette (notre pseudo), on a l'autorisation de l'envoyer chez nous. La commande est d'une simplicité enfantine :
docker push kernellab/fastapi-dev:v1.0
(Bien sûr, remplacez kernellab par votre propre nom d'utilisateur).
Vous allez voir des barres de progression s'afficher dans votre terminal. Docker est en train de découper votre image et d'envoyer chaque morceau (les fameux layers ou couches) sur les serveurs du Docker Hub.
Étape 5 : La vérification
Une fois le terminal calmé et l'envoi terminé :
- Retournez sur votre navigateur, sur le site du Docker Hub.
- Allez dans l'onglet Repositories.
- Magie ! Votre image
fastapi-devest là, publique, avec son tagv1.0.
N'importe qui dans le monde (ou n'importe quel serveur) peut désormais télécharger et lancer votre application avec un simple : docker run -p 8000:8000 kernellab/fastapi-dev:v1.0
Vous venez de boucler votre premier cycle complet de déploiement de manière propre et efficace.!