Le Container Registry GitLab pour le stockage de vos images Docker

Construisez, stockez et nettoyez vos images Docker directement dans GitLab grâce au Container Registry intégré.

Container Registry : Le Stockage de votre Logiciel

Le Registre de conteneurs est un système de stockage et de distribution intégré à GitLab qui permet de conserver vos images Docker. Contrairement au code source qui est du texte brut, une image Docker est une unité logicielle "prête à l'emploi" qui regroupe votre code, ses bibliothèques et ses dépendances pour garantir une exécution fiable sur n'importe quel serveur.

Pourquoi utiliser le Registre intégré de GitLab ?

Dans un cycle DevOps moderne, l'utilisation de conteneurs est la norme absolue. Utiliser le registre de GitLab plutôt qu'un service externe offre trois avantages majeurs :

  • Sécurité Native : Vous n'avez pas besoin de créer des comptes supplémentaires. Les droits d'accès au registre sont strictement calqués sur les permissions de votre projet GitLab.
  • Traçabilité Totale : Chaque image est liée au commit exact qui l'a générée. Vous savez précisément quelle version du code tourne sur votre serveur.
  • Automatisation Transparente : GitLab fournit des identifiants temporaires sécurisés à vos pipelines pour qu'ils puissent pousser les images sans intervention humaine.

Construire et Pousser (Le Pipeline Build)

Le but est de transformer votre code en image Docker et de l'envoyer dans le coffre-fort de GitLab. Pour cela, on utilise des variables d'environnement prédéfinies que GitLab injecte automatiquement dans vos pipelines.

Exemple de pipeline (.gitlab-ci.yml) :

build_app:
  stage: build
  image: docker:latest
  services:
    - docker:dind # Docker-in-Docker pour permettre la construction
  script:
    # 1. Connexion au registre GitLab avec des identifiants temporaires
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    
    # 2. Construction de l'image avec un nom dynamique (Tag)
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG .
    
    # 3. Envoi de l'image vers le registre GitLab
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG

Détail des variables utilisées :

  • $CI_REGISTRY_IMAGE : L'URL unique de stockage de votre projet.
  • $CI_COMMIT_REF_SLUG : Le nom de votre branche, ce qui permet de versionner vos images.
  • $CI_REGISTRY_USER / PASSWORD : Identifiants créés dynamiquement pour ce job précis.

Récupérer et Déployer (Le Pipeline Deploy)

Une fois l'image stockée dans le registre, elle est "gelée". Pour la déployer sur votre serveur ou votre cluster Kubernetes, vous devez effectuer un Pull de l'image.

Via Docker (Serveur simple)

Si vous déployez sur un serveur classique, vous devez d'abord vous connecter pour que Docker ait le droit de lire le registre privé de GitLab :

docker login registry.gitlab.com -u mon_user -p mon_access_token
docker pull registry.gitlab.com/mon-groupe/mon-projet:main

Via Kubernetes (Avec l'Agent GitLab)

C'est ici que tout se rejoint. Votre agent Kubernetes utilise son tunnel sécurisé pour récupérer l'image directement sans que vous n'ayez à gérer de mots de passe sur le serveur.

# Extrait d'un fichier de déploiement Kubernetes
spec:
  containers:
  - name: mon-app
    image: registry.gitlab.com/mon-groupe/mon-projet:main # On pointe vers le registre

4. Gérer le cycle de vie des images

Le stockage occupe de l'espace disque. GitLab permet de gérer le nettoyage automatique des images via l'interface :

  • Naviguez vers Settings > Container Registry.
  • Utilisez les Cleanup Policies pour automatiser la suppression des anciens tags.
    • Enable cleanup policy : Active la suppression automatique des tags d'images.
    • Keep the most recent : Nombre de tags à conserver impérativement pour garder un historique minimal.
    • Keep tags matching : Expression régulière pour les tags qui ne doivent jamais être supprimés (ex: main, latest).
    • Remove tags older than : Seuil d'ancienneté à partir duquel un tag devient éligible à la suppression.
politiques de nettoyage registre de conteneurs gitlab ci

"Gestion des politiques de nettoyage du Registre de Conteneurs"

Conclusion

Le Container Registry est le point final de votre chaîne de production automatisée. C'est ici que sont conservées les versions prêtes à l'emploi de votre logiciel. En centralisant vos images au même endroit que votre code, vous sécurisez votre distribution et simplifiez radicalement vos pipelines de déploiement.

Vous maîtrisez désormais le cycle complet : coder, tester via la CI, construire l'image dans le Registry et déployer sur un serveur via la CD.

Espace commentaire

Écrire un commentaire

Rejoignez la discussion

Vous devez être connecté pour poster un message.

21 commentaires

kdossantos
Membre Actif Rédacteur
Avatar de kdossantos
kdossantos
Membre Actif Rédacteur

Mon pipeline build prend 10 minutes. C'est normal ?

25/05/2026 à 20:51
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

T'as activé le cache Docker ? Regarde cette config pour accélérer ton build :

build: 
  variables: 
    DOCKER_DRIVER: overlay2 
  script: 
    - docker build --cache-from $CI_REGISTRY_IMAGE:latest -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
25/05/2026 à 20:51
bparis
Membre
Avatar de bparis
bparis
Membre

Top, ça a réduit le temps de build de moitié. Merci !

25/05/2026 à 20:51
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Avec plaisir. Pense aussi à bien nettoyer les couches inutiles dans ton Dockerfile pour alléger les images.

25/05/2026 à 20:51
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Oui, mais tu perds la Sécurité Native et l'intégration des droits GitLab. Autant rester sur le Registry intégré.

25/05/2026 à 14:48

Est-ce que je peux utiliser un registre externe comme DockerHub avec GitLab CI ?

25/05/2026 à 08:41
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

C'est le plus propre. L'Agent utilise le token du service account GitLab pour s'authentifier. Fini la gestion manuelle des secrets.

25/05/2026 à 03:14
marcelle91
Membre
Avatar de marcelle91
marcelle91
Membre

Pour Kubernetes, si je ne veux pas mettre de mot de passe, l'Agent est obligatoire ?

24/05/2026 à 20:33
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Si ton serveur est en HTTPS avec un cert auto-signé, tu dois ajouter le CA dans /etc/docker/certs.d/ sur ton serveur cible.

24/05/2026 à 15:59

J'ai un souci de certificat lors du docker pull sur mon serveur privé. Il ne reconnaît pas le registre GitLab.

24/05/2026 à 11:29
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Utilise les Cleanup Policies dans les Settings. Tu peux définir une regex pour garder les tags main et prod intacts.

24/05/2026 à 04:43
eleonore01
Membre Actif
Avatar de eleonore01
eleonore01
Membre Actif

Comment on fait pour purger les vieilles images automatiquement sans tout casser ?

24/05/2026 à 00:34
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Exact, et vérifie que ton Runner est configuré en mode privileged = true dans ton fichier config.toml du Runner.

23/05/2026 à 16:46
xmeyer
Membre
Avatar de xmeyer
xmeyer
Membre

J'ai eu le même souci. Il faut ajouter le service docker:dind dans ton config. C'est bien écrit dans l'article.

23/05/2026 à 11:45

Mon build échoue sur docker:dind avec un message Cannot connect to the Docker daemon. Quelqu'un a déjà vu ça ?

23/05/2026 à 06:31
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

$CI_COMMIT_REF_SLUG te permet d'avoir une image unique par branche. Ne jamais utiliser latest en production si tu veux éviter les surprises lors des déploiements.

23/05/2026 à 01:07
louise-rossi
Membre Actif
Avatar de louise-rossi
louise-rossi
Membre Actif

C'est quoi la différence entre $CI_COMMIT_REF_SLUG et juste mettre latest ?

22/05/2026 à 19:09
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

T'as bien utilisé les variables $CI_REGISTRY_USER et $CI_REGISTRY_PASSWORD ? Ne code jamais tes identifiants en dur.

22/05/2026 à 13:10
qblin
Membre Actif
Avatar de qblin
qblin
Membre Actif

Même erreur ici. J'ai ajouté docker login mais rien ne change.

22/05/2026 à 07:04
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Vérifie tes permissions sur le projet. Si tu es en Runner partagé, assure-toi que le job est bien autorisé à écrire dans le registre.

21/05/2026 à 23:47
kleveque
Membre
Avatar de kleveque
kleveque
Membre

J'ai testé le .gitlab-ci.yml mais je me mange une erreur denied: requested access to the resource is denied au moment du push. Une idée ?

21/05/2026 à 16:32

Rejoindre la communauté

Recevoir les derniers articles gratuitement en créant un compte !

S'inscrire