Tu galères avec des jobs GitLab CI qui échouent à cause des limitations du Docker Hub ? Respire. Ce tuto vidéo + mon article t’expliquent 4 techniques concrètes pour optimiser tes pipelines GitLab CI et contourner les limites de pull Docker. Une ressource à garder sous le coude.
✋ Mais avant, si tu veux en savoir plus sur ces limitations, j'ai fais un article et un podcast qui expliquent tout ici.
Ce que tu vas apprendre dans cet article
Tu utilises GitLab CI et Docker pour ton intégration continue ? Alors tu as sûrement déjà vu ce message de rate limit du Docker Hub… Et c’est frustrant. Très frustrant même.
Mais bonne nouvelle : il existe des solutions simples, propres, et efficaces pour contourner ces limites.
Dans cet article, basé sur ma vidéo tuto, je te partage 4 techniques puissantes pour que tes pipelines GitLab CI tournent comme une horloge.
Tu trouveras mon dépôt de code ici 🐸.
Avant de lire l’article complet, je t’invite à regarder la vidéo si ce n’est pas encore fait. Ça rend tout bien plus clair, crois-moi.
💬 Rejoins la communauté francophone #Froggit dédiée à git et GitLab
Authentifie tes jobs GitLab CI avec le Docker Hub
Pourquoi faire ?
Le Docker Hub impose une limite pour les utilisateurs anonymes. Une fois cette limite atteinte, tes jobs échouent.
En authentifiant tes jobs CI avec un compte Docker, tu augmentes ta limite. C’est la première étape pour souffler un peu.
Comment faire ?
- Crée un token d’accès personnel sur le Docker Hub.
- Génère une chaîne d’authentification en base64 :
echo -n "utilisateur:docker_personal_access_token" | openssl base64 -A
- Formate cette chaîne dans une variable GitLab CI nommée
DOCKER_AUTH_CONFIG
:{
"auths": {
"https://index.docker.io/v1/": {
"auth": "TOKEN_EN_BASE64"
}
}
} - Ajoute-la dans ton projet GitLab :
Settings > CI/CD > Variables
.
Et voilà, ton pipeline est maintenant authentifié. Les pulls sont plus nombreux, et tes jobs ne plantent plus.
📙 Documentation de GitLab : utiliser une autentification sur un registre de conteneurs
Authentifie tes runners GitLab
Deuxième solution : tu ajoutes l’authentification au niveau des runners. C’est utile si tu auto-héberges tes runners.
Étapes à suivre
- Modifie le fichier
/etc/gitlab-runner/config.toml
. - Ajoute la variable d’environnement
DOCKER_AUTH_CONFIG
dans la section[[runners]]
:[[runners]]
name = "runner_name"
environment = ["DOCKER_AUTH_CONFIG={\"auths\":{\"https://index.docker.io/v1/\":{\"auth\":\"<TOKEN_EN_BASE64>\"}}}"] - Redémarre le runner pour prendre en compte la config.
Cette méthode te donne plus de contrôle, surtout si tu veux éviter de dupliquer des tokens dans tous tes projets.
📙 Documentation de GitLab : utiliser une autentification sur un runner
Utilise le proxy de dépendance GitLab
Troisième astuce : le proxy de dépendance intégré à GitLab. Il permet de mettre en cache les images Docker directement sur ta forge. Résultat ? Moins de pulls sur le Docker Hub, et un pipeline plus rapide.
Configuration simple
- Active le proxy au niveau du namespace (groupe de premier niveau) dans GitLab :
Settings > Packages and registries > Dependency Proxy
. - Dans ton
.gitlab-ci.yml
, change l’image en ajoutant${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/
, comme ceci :image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/alpine:3.21
Dès le premier pull, l’image est mise en cache.
Et les suivants utiliseront directement le proxy GitLab. Bluffant, non ?
📙 Documentation de GitLab : le proxy de dépendance de conteneurs
Héberge tes images dans le registre de conteneur de GitLab
Quatrième et dernière méthode : héberges toi-même tes images dans le registre de conteneurs GitLab. C’est la solution la plus robuste et la plus souveraine.
Comment ça marche ?
- Utilise l’outil
crane
pour copier les images depuis Docker Hub vers GitLab :script:
- |
crane auth login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
while IFS= read -r image; do
if [ ! -z "${image}" ]; then
echo "📥 Download image: $image"
crane copy "${image}" "${CI_REGISTRY_IMAGE}/${image}"
fi
done < .gitlab/ci/images.txt - Gère tes images dans un fichier
.gitlab/ci/images.txt
pour automatiser la récupération. - Utilise les pipelines planifiés pour les mettre à jour régulièrement.
Plus de surprises, plus de dépendance externe.
Et tes pipelines tournent même quand Docker Hub tousse.
📙 Crane l'outil pour manipuler les images
Besoin d'aide pour gérer ta forge GitLab ou pour tout ce qui touche à GitLab-CI ?
Contacte-nous, nous avons forcément une prestation adaptée.
En résumé : 4 solutions pour repousser les limites
Voici un petit récap rapide :
- Authentifier les jobs CI : rapide à mettre en place, idéal pour commencer.
- Configurer les runners : plus durable, surtout pour les infrastructures internes.
- Activer le proxy de dépendance : gain de performance et réduction des pulls.
- Héberger les images dans GitLab : solution souveraine et full GitLab.
Tu peux même combiner ces méthodes pour optimiser au maximum tes pipelines.
FAQ : les questions qu’on me pose souvent
Est-ce que ça fonctionne avec Froggit.fr ou GitLab.com ? Oui, à condition d’avoir les droits pour ajouter des variables et activer les options.
Le proxy de dépendance est-il disponible dans toutes les éditions de GitLab ? Oui, il est disponible dans toutes les versions, ainsi que sur les instances self-hosted à partir de GitLab 14.0.
Est-ce que je peux utiliser une autre forge que Docker Hub ? Absolument. Tu peux adapter ces méthodes pour n’importe quel registre de conteneurs (Quay.io, Harbor, etc.)
Et maintenant ?
Si tu veux aller plus loin, pense à :
- T’inscrire à ma newsletter Git & GitLab.
- Rejoindre cette nouvelle communauté pour accéder à des astuces, anti-sèches et tutoriels exclusifs
- Me soutenir via un petit don 💙 pour continuer à produire ce contenu.
Et surtout : regarde la vidéo, elle t’explique tout en détail et avec démos à la clé.
Tu vas voir, ça va tout changer pour ton GitLab CI.
À très vite dans un prochain tuto !
Bienvenue, chez les compagnons sur Radio DevOps. La Baladodiffusion des Compagnons du DevOps. Le podcast en français dédié à notre mouvement.
- 🗞 Actus Devops : est une émission animée par des membres de la communauté des Compagnons du DevOps. Dans chaque épisode nous étudierons l’actualité Cloud et DevOps.
- 📻 Radio DevOps : est l'émission phare animée par des membres de la communauté des Compagnons du DevOps. Dans chaque épisode nous débattrons sur un sujet de fond.
- 🛋 En aparté : est une émission où je m’entretiendrai avec un invité sur le mouvement DevOps en entreprise.
- 🎙️ En Solo : est une émission où je serai seul pour vous parler de DevOps ou de Cloud.
Crédits
- Christophe Chaudier : consultant indépendant au sein du collectif Lydra. Animateur du podcast de la communauté des Compagnons du DevOps. professeur vacataire à Télécom Saint-Étienne et au CFAI Loire. Découvre le : https://lydra.fr/ea-3-le-podcasteur-christophe | LinkedIn : https://www.linkedin.com/in/cchaudier | Froggit : https://froggit.fr/
Habillage sonore
- L’intro et la fin sont de Baptiste Gaillet : FullStack développeur avec une tendance DevOps au Centre Scientifique et Technique du Bâtiment, Fondateur et développeur de l’application BedFoodCoffee pour aider les personnes en difficultés. Après des études dans le son et différents métiers, il a effectué une reconversion professionnelle en 2015 pour devenir développeur (Formation diplômante dans le cadre d’un CIF). LinkedIn : https://www.linkedin.com/in/baptiste-gaillet-223832b4 | Twitter : https://twitter.com/bat79a
- La musique d’intro est “Tupac Lives” de John Bartmann : https://pixabay.com/fr/music
- La musique de fin est “Passport” de Purple planet : https://www.purple-planet.com/passport
Habillage graphique
Licence
Si tu utilises ces contenus dans une publication, merci de nous le notifier dans les commentaires.
🌐 Les Compagnons du DevOps est une initiative de Lydra