Bonnes pratiques Docker pour projets web
Bonnes pratiques Docker web : images légères, secrets, .dockerignore, santé des conteneurs, et pièges à éviter en prod.

Bonnes pratiques Docker web : images légères, secrets, .dockerignore, santé des conteneurs, et pièges à éviter en prod.

Docker bien utilisé accélère une équipe web. Docker mal cadré produit des images de 2 Go, des secrets dans l’historique, des conteneurs zombies et des dimanches de debug. Ce guide regroupe des bonnes pratiques concrètes : images légères, .dockerignore, secrets, santé des conteneurs, pièges de prod — pour des projets web (Node, front statique, stacks Compose).
api:1.6.2, éventuellement digest en prod.latest comme seule référence déployée.Une image n’est pas un dossier magique : c’est ce que vous déployez. La discipline de versioning évite le « on ne sait plus ce qu’il y a en prod ».
Pour ancrer ces réflexes dans une formation web, Academy Yunt reste un cadre plus sûr que la collecte de snippets au fil des incidents.
*-slim ou distroless quand c’est compatible ;npm ci --omit=dev (ou équivalent) en stage final ;rm -rf /var/lib/apt/lists/* après apt) ;Exemple pour une API Node :
node_modules
.git
.env
.env.*
!.env.example
coverage
dist
npm-debug.log
Dockerfile*
README.md
.vscode
Sans ce fichier, le contexte de build gonfle, le cache devient imprévisible, et un .env local peut finir dans une layer. C’est l’une des corrections les plus rentables d’un projet.
À éviter :
ENV DATABASE_PASSWORD=... dans le Dockerfile de prod ;COPY .env . ;ARG contenant des tokens (visibles dans l’historique).Préférer :
En local, .env gitignoré + .env.example suffisent souvent. En prod, un gestionnaire de secrets digne de ce nom.
USER node
Une route /health (liveness) et éventuellement /ready (dépendance DB OK) simplifient Compose et les load balancers.
HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
CMD node -e "fetch('http://127.0.0.1:3000/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"
(Adaptez selon l’image ; parfois curl/wget absents — d’où un petit check Node ou un binary dédié.)
Dans Compose : depends_on + condition: service_healthy.
/var/log du conteneur jetable ;Quand la prod « marche mais c’est lent », Docker n’est qu’une couche : un audit perf applicative complète le diagnostic conteneur.
docker scout, Trivy, etc. selon votre chaîne).Local : volumes de code, npm run dev, outils (mailpit, adminer) en profiles.
Prod : image immuable, pas de bind m
Les livraisons soignées côté Agency Yunt séparent clairement ces modes pour que le client ne hérite pas d’un Compose de demo en production.
Pipeline type :
docker build (cache layers) ;compose d’intégration) ;Évitez de builder à la main sur le serveur de prod (git pull && docker build sans traçabilité).
.dockerignore présent et testé/health OK derrière le proxycompose/chart de staging sans volumes de codeSi trois cases manquent, ce n’est pas « de la dette acceptable », c’est un incident en puissance.
Cause : env manquantes, hostname localhost, volumes absents, CPU/RAM plus bas. Correctif : parité des variables, readiness, ressources documentées.
Cause : crash au boot (migration, conf). Correctif : docker logs, exit codes, ne pas masquer avec des restart policies agressives sans alerte.
Cause : « besoin de lancer des conteneurs ». Risque : clé de la machine. Correctif : architecture différente, DinD contrôlé, ou API d’infra dédiée.
Cause : changements manuels dans un conteneur vivant. Correctif : cattle — rebuild/redeploy, pas docker exec permanent comme mode de config.
-p) en multi-stacks.L’écosystème Yunt relie ces détails d’ingénierie à la formation et à la qualité produit : Docker n’est pas un îlot.
Avant d’accepter une PR qui touche Docker, posez-vous :
docker history ?Ces questions forment une revue courte et efficace. Elles évitent les débats esthétiques (« Alpine ou pas ») sans regarder les risques réels.
Reprenez Dockerfile multi-stage, Compose de stack locale, puis ajoutez scan CVE et politique de rebuild mensuelle des bases. La sécurité des conteneurs est un continuum, pas un checkbox unique.
Pour progresser avec méthode, Academy Yunt. Pour une mise en œuvre sur projet client, agency.yunt.fr. Pour un état des lieux site déjà en ligne, audit.yunt.fr.
Utile souvent, parfois géré plutôt par l’orchestrateur. L’important est d’avoir un endpoint de santé fiable.
Plus petit ≠ automatiquement plus sûr. La fraîcheur des patches et la surface réelle comptent davantage.
Dès qu’une CVE critique touche votre stack, et périodiquement (mensuel) pour rester à jour. Automatisez si possible.
Excellent pour réduire la surface si votre process est un binaire/Node autonome et que vous acceptez un debug plus exigeant.
Même image, variables différentes. Évitez trois Dockerfiles quasi identiques « dev/staging/prod » sauf besoin réel.
Les bonnes pratiques Docker pour le web tiennent en quelques principes : images petites et versionnées, secrets hors layers, utilisateur non-root, santé observable, séparation dev/prod, CI traçable, données hors conteneur jetable. Le reste est de la discipline d’équipe.
Appliquez d’abord .dockerignore, multi-stage et tags semver. Puis healthchecks et politique de secrets. Vous éliminerez déjà la majorité des incidents « conteneur » du quotidien.
Pour faire de ces gestes une compétence solide plutôt qu’une checklist oubliée, poursuivez avec Academy Yunt.
Object storage (S3/MinIO) de préférence. Volume persistant si contrainte, avec backup. s** le conteneur (perdus au redeploy) — utiliser object storage ou volume backupé ;
Cause : stage unique, COPY . . trop tôt, caches apt. Correctif : multi-stage + dockerignore + ordre des layers.
ount du source, NODE_ENV=production, ressources limitées (mem_limit / requests-limits).
Mélanger les deux dans un seul fichier sans override, c’est inviter l’accident.
Ou utilisateur dédié créé dans l’image. Montez les volumes avec des permissions cohérentes. Évitez privileged: true « pour que ça marche ». Si un besoin kernel apparaît, documentez-le comme exception, pas comme défaut.
docker images mon-api
Suivez la taille dans le temps. Une régression +300 Mo mérite une explication (souvent un COPY . . trop large ou un stage unique).