Dockerisation du projet Spring Boot
Dans cette partie, vous apprendrez à dockeriser une application Spring Boot avec une base de données MariaDB, en utilisant Docker Compose pour orchestrer les services. Vous verrez comment configurer les fichiers Docker, gérer les variables d'environnement et lancer l'application en mode développement et production.
Rôle des fichiers
Dockerfile
- Multi-stage build : utilise une image Maven pour compiler le projet et produire le jar, puis une image JDK légère pour exécuter l'application.
- Avantage : image finale plus légère, compilation isolée.
- Points importants : ARG/ENV pour le JAR,
ENTRYPOINTpasseJAVA_OPTS.
docker-compose.yml (production/stack complet)
- Définit trois services :
db(MariaDB),app(image buildée depuisDockerfile) etphpmyadmin. - Utilise
env_file: - .envpour centraliser les secrets/config. - Monte un volume
db_datapour la persistance des données. appdépend dedbavecdepends_on.- Mappe le port application via la variable
SERVER_PORTet expose3306pour la DB.
docker-compose.dev.yml (dev)
- Contient uniquement
db(MariaDB) pour que l'application soit lancée depuis l'IDE mais connectée à une base dockerisée. - Utiliser en dev quand on veut debug depuis IntelliJ et garder la DB isolée.
.dockerignore
- Exclut les fichiers inutiles du contexte de build Docker (ex :
target/,.git/, etc.) pour accélérer la construction de l'image.
Variables importantes (dans .env)
MARIADB_DATABASE,MARIADB_USER,MARIADB_PASSWORD,MARIADB_ROOT_PASSWORDDATASOURCE_URL,DATASOURCE_USERNAME,DATASOURCE_PASSWORD(pour Spring Boot)LIQUIBASE_CHANGE_LOG(si Liquibase utilisé)SERVER_PORT(port exposé par l'application)JAVA_OPTS(options JVM au runtime)
Exemple rapide de DATASOURCE_URL : jdbc:mariadb://db:3306/<DATABASE>?useSSL=false
Commandes utiles
-
Lancer la DB en dev (app depuis l'IDE) :
docker compose -f docker-compose.dev.yml up -d -
Lancer le stack complet (build + run) :
docker compose -f docker-compose.yml up --build -
Logs :
docker compose -f docker-compose.yml logs -f app -
Arrêter et supprimer volumes :
docker compose -f docker-compose.yml down -v -
Inspecter conteneur DB :
docker compose -f docker-compose.yml exec db sh
(ou utilisermysqlclient selon image)
Points de vigilance / dépannage rapide
- Si
dockernécessitesudo, ajouter l'utilisateur au groupedockerou utilisersudo. - Si port 3306 déjà utilisé, adapter le mapping local dans
docker-composeou arrêter le service local MySQL. - Pour supprimer data corrompue :
docker volume rm <project>_db_data(attention perte de données). - Erreurs de build : vérifier que
pom.xmletsrc/sont copiés correctement dans leDockerfile.
Vidéo explicative
Évolutions du code (fichiers à récupérer dans le projet)
Dockerfiledocker-compose.ymldocker-compose.dev.yml.env(exemple à créer/modifier avant démarrage).dockerignore
Copier ces fichiers depuis le dépôt local ou les ouvrir dans l'IDE pour modification.