TP07 : Mise en place d'un registre Docker privé avec interface web
Objectif du TP
- Déployer un registre Docker privé pour stocker vos images.
- Configurer une interface web pour gérer ce registre.
- Tagger, pousser et tirer des images depuis ce registre.
Rendu attendu
- Capture de l’interface web listant votre image.
- Les commandes utilisées (
tag,push,pull,run).
Questions d'ouverture
- À quoi sert un registre privé si Docker Hub existe déjà ?
- Quelle différence entre
docker tag,docker pushetdocker pull?
Focus : Registry et tags
- Un registre stocke et distribue des images (public/privé).
- Les tags identifient une “version” d’image (ex:
:latest,:v1). - En local/dev, HTTP peut dépanner; en prod, utilisez TLS + auth.
Mise en pratique
2.1. Création du fichier docker-compose.yml
Créez un docker-compose.yml avec le contenu suivant :
- Service
registry: Le registre Docker privé accessible sur le port 5000. - Service
registry-ui: L'interface web pour gérer le registre, accessible sur le port 8080. - Volume
registry_data: Le volume monté qui stocke les données du registre de manière persistante.
2.2. Vérification du déploiement
Lancez votre docker compose avec la commande up puis vérifiez le déploiement en allant sur l'interface web. L'interface devrait indiquer qu'aucune image n'est présente pour le moment.
Attention - Un registre exposé en HTTP sans TLS doit rester un usage de développement/local. En production, activez TLS et une authentification.
2.3. Pousser une image vers le registre privé
Récupérez l'image officielle hello-world.
Retaguez l'image hello-world avec le nom que vous voulez (ex. localhost:5000/hello:demo).
Envoyez l'image taguée vers votre registre (docker push localhost:5000/hello:demo).
Retournez sur l'interface web http://localhost:8080 et actualisez la page. Vous devriez voir votre image listée.
2.4. Tester le registre privé
- Supprimez l'image locale (indice :
docker rmi). - Tirez votre image depuis votre registre (
docker pull localhost:5000/hello:demo). - Exécutez votre image : vous devriez voir le message de Hello World de Docker.
2.5. Bonnes pratiques de tags
Un tag est une étiquette sur une image. Bien tagger ses images est essentiel pour la traçabilité, la reproductibilité et la sécurité en production.
# Plusieurs tags sur la même image : pratique courante
docker tag mon-app:local localhost:5000/mon-app:1.0.0
docker tag mon-app:local localhost:5000/mon-app:latest
docker tag mon-app:local localhost:5000/mon-app:git-$(git rev-parse --short HEAD)
| Tag | Exemple | Usage |
|---|---|---|
| Sémantique | :1.2.3 |
Version stable, reproductible |
| SHA Git | :git-a3f9d1c |
Traçabilité exacte (quelle ligne de code ?) |
:latest |
:latest |
Commodité locale — dangereux en prod |
| Environnement | :staging, :prod |
Déploiement par environnement |
Pourquoi
:latestest dangereux en production ?:latestne veut pas dire « la dernière version publiée ». C'est juste le tag par défaut si vous n'en spécifiez pas. Si deux personnes fontdocker pull mon-app:latestà deux jours d'intervalle, elles peuvent obtenir des images différentes. En production, utilisez toujours un tag immuable (version sémantique ou SHA Git).Question : Quelle différence entre « promouvoir une image » et « reconstruire une image » ? Pourquoi ne doit-on jamais publier deux builds différents sous le même tag ?
2.6. Nettoyage
Après avoir terminé le TP, vous pouvez arrêter et supprimer les services en exécutant :
Conclusion
- Vous avez mis en place un registry privé et son interface.
- Vous savez tagger, pousser et tirer des images depuis ce registre.
- Vous connaissez les bonnes pratiques de versionnement d'images (sémantique, SHA Git, pas de
:latesten prod).