Optimisation des temps de déploiement CI/CD avec Docker Layer Caching

ymenard 01/05/2026
RÉSOLU
ymenard
Auteur
Avatar de ymenard
ymenard
Auteur

On galère avec nos temps de build Docker. Chaque build prend environ 8 minutes à cause de l'installation des dépendances npm alors qu'elles ne changent pas à chaque commit. On utilise GitLab CI avec le cache distribué, mais ça semble sous-performant.

Quelles sont vos stratégies pour optimiser le docker build ? Est-ce que le --cache-from avec une image intermédiaire est vraiment plus efficace qu'un simple volume de cache ?

01/05/2026 à 15:00

11 commentaires

daniel18
Membre
Avatar de daniel18
daniel18
Membre

Le --cache-from est indispensable si tu utilises des runners éphémères. Par contre, il faut s'assurer que ton image est bien poussée après chaque build réussi.

02/05/2026 à 12:39
ibernard
Membre
Avatar de ibernard
ibernard
Membre

As-tu essayé le montage de cache spécifique avec BuildKit ? C'est beaucoup plus rapide pour npm ou pip.

RUN --mount=type=cache,target=/root/.npm npm install
03/05/2026 à 07:33
ymenard
Auteur
Avatar de ymenard
ymenard
Auteur

Je n'avais pas pensé au --mount=type=cache. Ça évite de copier les fichiers dans l'image finale, c'est ça ?

03/05/2026 à 23:51
omoulin
Membre
Avatar de omoulin
omoulin
Membre

Exactement. C'est un point de montage temporaire pendant le build. C'est beaucoup plus efficace pour les dépendances lourdes.

04/05/2026 à 17:05
daniel18
Membre
Avatar de daniel18
daniel18
Membre

Attention cependant à la persistance du cache sur les runners GitLab. Si ton runner n'a pas de cache local, ça ne servira à rien.

05/05/2026 à 09:49
ymenard
Auteur
Avatar de ymenard
ymenard
Auteur

Nos runners sont sur des instances EC2 avec un disque SSD. Le cache local devrait être rapide.

05/05/2026 à 23:09
ibernard
Membre
Avatar de ibernard
ibernard
Membre

Si tu es sur AWS, regarde aussi buildx avec un backend de cache S3, c'est top pour le multi-node.

06/05/2026 à 17:15
ymenard
Auteur
Avatar de ymenard
ymenard
Auteur

Le cache S3 me semble être la solution la plus robuste pour éviter de dépendre du runner local.

07/05/2026 à 12:41
omoulin
Membre
Avatar de omoulin
omoulin
Membre

Clairement, surtout si tu as des runners qui tournent en auto-scaling.

08/05/2026 à 04:50
daniel18
Membre
Avatar de daniel18
daniel18
Membre

Pense aussi à bien ordonner tes COPY dans ton Dockerfile pour maximiser le cache des couches.

09/05/2026 à 04:27
ymenard
Auteur
Avatar de ymenard
ymenard
Auteur

Oui, on fait bien COPY package.json . avant le reste. Je vais implémenter le --mount et le cache S3. Merci pour les pistes.

09/05/2026 à 16:36

Laisser une réponse

Vous devez être connecté pour poster un message !

Rejoindre la communauté

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

S'inscrire