← Tous les articles

Conteneuriser une application Next.js sans alourdir l’image

#Docker#Next.js#DevOps

Un Dockerfile multi-étapes, la sortie standalone et les quelques pièges qui font passer une image de 1,2 Go à 180 Mo.

La première image Docker que j’ai construite pour une application Next.js pesait 1,2 Go. La dernière en pèse 180. Voici ce qui a changé entre les deux.

Séparer les étapes

Une image de build n’a rien à faire en production. Le pattern multi-étapes permet d’installer les dépendances et de compiler dans une première image, puis de ne copier que le résultat dans une seconde, bien plus petite.

Utiliser la sortie standalone

Next.js sait produire un dossier autonome qui n’embarque que les fichiers réellement nécessaires à l’exécution. C’est l’option output: "standalone" dans la configuration, et c’est elle qui fait la plus grosse différence.

Ne pas oublier le .dockerignore

Sans lui, le dossier node_modules local et le cache de build partent dans le contexte de construction. Le build devient lent avant même d’avoir commencé.