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
An Error Occurred: Internal Server Error

Oops! An Error Occurred

The server returned a "500 Internal Server Error".

Something is broken. Please let us know what you were doing when this error occurred. We will fix it as soon as possible. Sorry for any inconvenience caused.