Skip to main content
Les services backend chez Kaeyros Analytics (majoritairement Node.js, avec des composants Python et Rust) suivent un pattern Dockerfile multi-stage standardisé. Ce gabarit minimise la taille de l’image finale, élimine les dépendances de build inutiles et renforce la sécurité avec un utilisateur non-root.

Dockerfile gabarit complet

Dockerfile

Explications ligne par ligne

Stage 1 : Dépendances (deps)

Stage 2 : Build (build)

Stage 3 : Production (production)

Variantes par langage

Le gabarit ci-dessus s’applique tel quel. Assurez-vous que votre package.json contient les scripts build et que le point d’entrée compilé est bien dist/index.js.

Bonnes pratiques

Cache des layers

Copiez toujours les fichiers de dépendances (package.json, requirements.txt, Cargo.toml) avant le code source. Cela permet à Docker de réutiliser le cache des installations quand seul le code change.

Minimisation de l'image

L’image finale ne contient que le runtime et les artefacts compilés. Pas de sources, pas de git, pas de devDependencies. L’image passe typiquement de 1.2 Go à ~150 Mo.

Sécurité non-root

L’utilisateur nodejs (uid 1001) n’a pas les droits root. Même en cas d’exploitation d’une vulnérabilité dans l’application, l’attaquant est confiné.

Healthcheck natif

Le healthcheck HTTP intégré évite les dépendances externes (curl, wget) et fonctionne avec le runtime Node.js déjà présent.
Ne modifiez jamais l’ordre des stages ni les UID/GID sans synchronisation avec l’équipe DevOps. Les PodSecurityPolicies et les NetworkPolicies du cluster s’appuient sur ces identifiants.
Pour les projets TypeScript, vérifiez que tsconfig.json produit bien une sortie dans dist/. Le CMD du Dockerfile attend dist/index.js comme point d’entrée.