Skip to content

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 push et docker 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 :latest est dangereux en production ? :latest ne 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 font docker 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 :

docker compose down

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 :latest en prod).