← All writing

Containerising a Next.js app without a bloated image

#Docker#Next.js#DevOps

A multi-stage Dockerfile, the standalone output, and the few traps that take an image from 1.2 GB down to 180 MB.

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é.