30/01/2026

Travail avec les registres Docker : Docker Hub, versions et tags d’images

Les registres Docker jouent un rôle central dans la distribution, le partage et la gestion des images au sein d’un workflow DevOps. Qu’il s’agisse du registre public Docker Hub ou d’un registre privé déployé en interne, il est essentiel de comprendre leur fonctionnement pour organiser correctement ses images.

Ce chapitre explore l'utilisation du Docker Hub et le déploiement d'un registre privé. Vous découvrirez également comment gérer efficacement les versions et les tags sur les images Docker.

Découverte de Docker Hub et autres registres (Docker Registry)

Docker Hub et d'autres registres Docker jouent un rôle fondamental dans le cycle de vie des conteneurs. Ils permettent de stocker, partager et distribuer des images Docker à travers des infrastructures locales ou cloud. Docker Hub est le registre public le plus utilisé, mais d'autres solutions comme Docker Registry (registre privé auto-hébergé) et GitLab Container Registry (intégré à GitLab CI/CD) offrent des alternatives adaptées aux besoins de sécurité et de gestion des images en entreprise. Nous allons détailler leur fonctionnement, leurs différences et leurs usages avec des exemples concrets.

Docker Hub : le registre public principal

Docker Hub est le service officiel de gestion d'images Docker. Il propose un registre public où tout utilisateur peut stocker et partager des images, ainsi qu'un mode privé pour protéger certaines images.

Quelles sont les caractéristiques de Docker Hub ?

  1. Héberge des millions d'images Docker publiques et privées
  2. Prise en charge des tags et des versions (nginx:latest, python:3.11)
  3. Connexion avec CI/CD (GitHub Actions, GitLab CI, Jenkins)
  4. Authentification via docker login pour les dépôts privés
  5. Système de "trust" (Docker Content Trust) pour vérifier l'intégrité des images

Comment utiliser Docker Hub ?

Avant d'envoyer ou de récupérer des images, connectons-nous avec docker login (comme vu dans le chapitre précédent) en saisissant les identifiants de compte correspondants. Nous pouvons également passer par le portail officiel accessible depuis hub.docker.com.

Il est nécessaire de s'authentifier pour avoir accès à la liste des images publiques depuis : hub.docker.com/search?type=image&image_filter=official.

Aperçu du Docker Hub officiel

Nous allons poursuivre avec l'usage de la console. Pour télécharger une image depuis Docker Hub, utilisons :

docker pull mysql:8.0

Cette commande récupère l'image mysql:8.0 depuis Docker Hub.

Exemple - Docker pull mysql

Pour envoyer une image personnalisée sur Docker Hub, il nous suffit de réaliser deux actions :

  • Taguer l'image avec notre nom d'utilisateur :
docker tag mon-image jeremy/mon-image:latest
  • Pousser l'image sur Docker Hub :
docker push jeremy/mon-image:latest

Nous pouvons afficher nos images depuis le portail :

Voir les images sur le Docker Hub

Docker Registry : héberger un registre privé

Docker Registry est une solution auto-hébergée permettant aux entreprises d'héberger leurs propres images en local ou sur un cloud privé, garantissant ainsi un meilleur contrôle des accès et une réduction des coûts liés aux transferts externes.

Quelles sont les caractéristiques de Docker Registry ?

  • Hébergé en interne sur un serveur privé
  • Sécurisé via HTTPS et authentification
  • Optimisé pour CI/CD dans un environnement restreint
  • Évite la dépendance aux services externes (Docker Hub, AWS)

Comment déployer un registre privé ?

Docker permet d'héberger facilement un registre privé en utilisant une image officielle. Démarrons un registre Docker privé simplement à l'aide de la commande suivante :

docker run -d -p 5000:5000 --name registry registry:2

Cela lance un registre local écoutant sur le port 5000.

Exécuter un registre Docker privé

Ajoutons un tag et poussons une image dans ce registre privé :

docker tag mysql:8.0 localhost:5000/mysql:8.0 
docker push localhost:5000/mysql:8.0

L'image est maintenant stockée en local dans notre registre privé, accessible via localhost:5000.

Pousser une image Docker dans le Registre privé

Pour récupérer l'image depuis ce registre privé :

docker pull localhost:5000/mysql:8.0

Il est recommandé d'ajouter un certificat SSL pour sécuriser l'accès au registre :

docker run -d -p 443:5000 --restart=always \ 
  -v /home/jeremy/certificats:/certs \
  -e REGISTRY_HTTP_ADDR=0.0.0.0:5000 \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/registry.key \
  --name registry registry:2

Il est nécessaire de disposer d'un certificat auto-signé ou d’une autorité de certification pour que cette commande fonctionne. Nous allons expliquer la démarche en utilisant un certificat auto-signé.

Créons un nouveau dossier certificats/ :

mkdir certificats && cd certificats/

Générons une clé privée :

openssl genrsa -out registry.key 2048

Générons un certificat auto-signé (valide 1 an) :

openssl req -new -x509 -key registry.key -out registry.crt -days 365 -subj "/C=FR/ST=Paris/L=Paris/O=ITConnect/CN=debian-itconnect.myguest.virtualbox.org"

Cette commande va créer registry.key (clé privée) et registry.crt (certificat auto-signé). Ces fichiers seront utilisés pour chiffrer les communications HTTPS entre les clients Docker et notre registre privé.

Puis nous démarrons notre registre avec HTTPS :

docker run -d -p 443:5000 --restart=always \
  -v /home/jeremy/certificats:/certs \
  -e REGISTRY_HTTP_ADDR=0.0.0.0:5000 \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/fullchain.pem \
  -e REGISTRY_HTTP_TLS_KEY=/certs/privkey.pem \
  --name registry registry:2
Créer un certificat TLS auto-signé pour le registre docker privé

Si nous souhaitons un certificat officiellement reconnu, nous pouvons utiliser Let's Encrypt avec Certbot. Dans ce cas, nous devons commencer par installer Certbot :

apt install certbot

Notre machine possède une adresse IP fixe. Ajoutons l'entrée correspondante dans /etc/hosts/ :

Docker - Fichier hosts

Notre domaine doit être accessible via HTTP avant d'exécuter :

certbot certonly --standalone -d <FQDN>

Dans notre cas, la commande est :

certbot certonly --standalone -d debian-itconnect.myguest.virtualbox.org

Les certificats seront générés dans /etc/letsencrypt/live/debian-itconnect.myguest.virtualbox.org/ :

  • Clé privée : /etc/letsencrypt/live/debian-itconnect.myguest.virtualbox.org/privkey.pem
  • Certificat : /etc/letsencrypt/live/debian-itconnect.myguest.virtualbox.org/fullchain.pem

Adaptons la commande Docker pour utiliser les certificats Let's Encrypt :

docker run -d -p 443:5000 --restart=always \
  -v /etc/letsencrypt/live/monserveur.local:/certs \
  -e REGISTRY_HTTP_ADDR=0.0.0.0:5000 \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/fullchain.pem \
  -e REGISTRY_HTTP_TLS_KEY=/certs/privkey.pem \
  --name registry registry:2

Gestion des versions et tags d'images

Dans un environnement Docker, une image est une version figée d'une application ou d'un service, qui peut être exécutée sous forme de conteneur. Afin d'assurer la cohérence et la reproductibilité des déploiements, chaque image Docker peut être associée à un tag représentant une version spécifique. La gestion des versions et des tags est essentielle pour éviter les problèmes liés aux mises à jour imprévues et garantir une compatibilité stable entre les services.

Comment fonctionnent les tags ?

Un tag est un identifiant attribué à une image Docker, permettant de différencier ses différentes versions. Par défaut, si aucun tag n'est spécifié lors du pull, du build, ou du run, Docker utilise le tag latest, qui représente la version la plus récente d'une image.

Voici un exemple de structure d'image avec tag :

  • nginx:latest → Dernière version stable de Nginx
  • nginx:1.25.0 → Version spécifique 1.25.0
  • nginx:alpine → Version optimisée sur Alpine Linux
  • nginx:mainline → Version en développement

Ici, nginx est le nom de l'image et latest, 1.25.0, alpine, mainline sont les différents tags associés.

Par défaut, si nous récupérons une image sans préciser de tag, Docker prendra la version latest. Donc la commande docker pull nginx est équivalente à la commande docker pull nginx:latest.

Mais si nous souhaitons récupérer une version spécifique :

docker pull nginx:1.25.0

Ou une version optimisée sur Alpine Linux :

docker pull nginx:alpine

Pourquoi utiliser des tags spécifiques ?

  • Assure que l'application fonctionne avec une version précise et évite les mises à jour inattendues
  • Permet d'avoir plusieurs versions installées en parallèle (nginx:1.24.0 et nginx:1.25.0)
  • Facilite la gestion des dépendances dans des environnements de production

Comment construire une image avec un tag ?

Lorsque nous construisons une image personnalisée avec docker build, nous pouvons lui attribuer un tag directement :

docker build -t mon-image:1.0 .

Ici, la valeur mon-image:1.0 signifie que l'image sera nommée mon-image et taguée avec 1.0.

Si nous souhaitons ajouter un autre tag à une image existante, utilisons docker tag :

docker tag mon-serveur-apache:latest mon-serveur-apache:1.0
Liste des images avec gestion des tags

Les deux tags latest et 1.0 pointent vers la même image ID, il ne s'agit pas d'un duplicata.

Comment supprimer une image locale ?

Si nous souhaitons supprimer une image de votre machine locale sans affecter le registre distant, nous utilisons cette commande :

docker rmi mon-serveur-apache:1.0

Cela ne supprime que le tag localement. L'image peut toujours être récupérée depuis Docker Hub.

Supprimer une image docker avec docker rmi

Pour assurer la maintenance de notre hôte Docker, nous pouvons supprimer toutes les images non utilisées avec cette commande :

docker image prune -a

Conclusion

Savoir utiliser un registre Docker, public ou privé, est indispensable pour utiliser Docker : vous aurez forcément besoin de télécharger des images depuis un registre, et éventuellement, d'en pousser vers un registre. En maîtrisant la gestion des tags et les bonnes pratiques de mise à disposition des images, vous renforcez la qualité et la traçabilité de vos déploiements.

Dans le prochain module de ce cours, nous parlerons de l'utilisation de Docker en production, ce qui vous donnera l'occasion de faire vos premiers pas avec Kubernetes.

author avatar
Jérémy GAK
Jérémy GAK est un ingénieur Linux doté de plus de 11 ans d'expérience dans le domaine. Sa carrière diversifiée s'étend de l'administration système et réseau à une expertise pointue en sécurité informatique. Consultant et ingénieur système de métier et actif dans la veille technologique, il est expert sur les technologies open source, l'automatisation des processus et la cybersécurité.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.