5 bonnes pratiques Docker que j'applique systématiquement sur mes projets Java 👇
Utiliser Docker avec Java peut grandement simplifier les déploiements… à condition de respecter quelques principes. Sinon, on se retrouve vite avec des images lourdes, lentes et peu sécurisées. Voici les habitudes que j’ai prises pour livrer des conteneurs Java vraiment exploitables en production :
1. Images multi-étapes pour un résultat propre
Je sépare le build (avec Maven ou Gradle) de l’exécution, grâce aux builds multi-étapes. L’image finale ne contient que le JDK/JRE et le .jar ou .war. J’exclus tout ce qui est inutile grâce à .dockerignore (dossier .m2, target/, etc.).
2. Éviter l’exécution en root
Par défaut, de nombreuses images Java tournent en tant que root. Je crée un utilisateur dédié dans le Dockerfile pour éviter tout risque en cas de compromission.
3. Versionner de manière explicite
Plutôt que d’utiliser latest, je tague mes images avec la version de l’application (1.0.3, par exemple) et l’identifiant Git. Ça évite les surprises et facilite les rollbacks.
4. Optimiser le cache Docker
Je commence par copier le pom.xml ou build.gradle et les fichiers de dépendances, puis j’installe celles-ci avant d’ajouter le code. Ainsi, les dépendances sont mises en cache et je gagne un temps précieux à chaque build.
5. Simuler la prod en local avec Docker Compose
J’intègre tous les services nécessaires (PostgreSQL, Kafka, Redis, etc.) dans un docker-compose.yml pour que l’équipe puisse travailler dans un environnement proche de la production, sans rien installer localement.
Et un scan de sécurité systématique
Avant chaque mise en prod, je passe mes images dans un scanner de vulnérabilités (comme Trivy ou Snyk) pour limiter les risques.