LAB: Dockerization d'une application Springboot#
Présentation#
Objectif#
- Création image Docker avec une approche de build multistage
- Administration & exploitation conteneur
- Familiarisation écriture Dockerfile
Prérequis#
- Existence d'un réseau Docker lab-network et d'un conteneur lecloudfacile-postgres. Si vous ne les avez pas, je vous recommande de dérouler le lab postgres-docker
- Instance docker fonctionnel
- Buildx (plugin Docker CLI) installé
- Maitrise des commandes de base Docker
Déroulement du Lab#
Etape 1 : Récupération du code source#
La commande suivante permet de récupérer le code source du dépôt des labs.
git clone https://github.com/wingufactory/lecloudfacile-devops-labs.git
cd springboot-react-app/moodboard-backend
Etape 2 : Création d'un Dockerfile#
Créez un fichier nommé Dockerfile et mettre le contenu ci-dessous:
# Etape 1: Construction et packaging de l'application
# Utilisation d'une image de base maven
FROM maven:3.9.4-eclipse-temurin-17 AS build
# Définition d'un répertoire de travail à l'intérieur du conteneur temporaire
WORKDIR /app
# Copie du fichier pom.xml et téléchargement des dépendances maven
COPY pom.xml .
RUN mvn dependency:go-offline
# Copie des fichiers source de l'application
COPY src ./src
# Construction et Packaging de l'application
RUN mvn clean package -DskipTests
# Etape 2: Creation de l'image finale contenant que le jar et pas les sources
# Utilisation d'une image de base jdk
FROM eclipse-temurin:17-jdk-jammy
# Définition d'un répertoire de travail à l'intérieur du conteneur temporaire
WORKDIR /app
# Copie du package JAR produit à l'étape étape 1
COPY --from=build /app/target/moodboard-backend-0.0.1-SNAPSHOT.jar app.jar
# Exposition du port d'execution de l'application
EXPOSE 8080
# Lancement de l'application
ENTRYPOINT ["java", "-jar", "app.jar"]
Etape 3: Création de l'image#
La commande suivante permet de créer une image docker springboot-imageavec le tag 1.0.0.
docker buildx build -t springboot-image:1.0.0 --load .
Etape 4: Execution du container#
La commande suivante permet :
- de créer et de démarrer un conteneur myawesome-springboot-app à partir de l'image springboot-image:1.0.0
- d'instancer les variables d'environnement requises pour connecter l'application springboot à la base de donnée postgres créée durant le précédent lab.
- de rattacher le conteneur au réseau lab-network
NB: Avant execution, remplacez <db-password> par le mot de passe indiqué sur POSTGRES_PASSWORDlors de la création de la base de données Postgres au lab précédent.
docker run -d --name myawesome-springboot-app\
--network lab-network\
-e SPRING_DATASOURCE_URL="jdbc:postgresql://lecloudfacile-postgres:5432/moodboard"\
-e SPRING_DATASOURCE_USERNAME="lecloudfacile"\
-e SPRING_DATASOURCE_PASSWORD="<db-password>"\
-e FRONTEND_APP_URL="http://0.0.0.0:8090"\
-e SPRING_JPA_HIBERNATE_DDL_AUTO="update"\
-p 8088:8080\
springboot-image:1.0.0
Explication de la commande
- docker run: créer et démarrer un conteneur
- -d : executer le conteneur en arrière-plan
- --name myawesome-springboot-app : donner le nom
myawesome-springboot-appau conteneur qui sera créé - --network lab-network : rattacher le conteneur au réseau
lab-network - -e SPRING_DATASOURCE_URL="jdbc:postgresql://lecloudfacile-postgres:5432/moodboard: définir une variable d'environnement contenant la chaine de connexion à la base de données nommé
mooadboardsur le conteneurlecloudfacile-postgres - -e SPRING_DATASOURCE_USERNAME: définir une variable d'environnement pour indiquer l'utilisateur, dans notre exemple
lecloudfacile, qui permettra d'établir la connexion à la base de données - -e SPRING_DATASOURCE_PASSWORD=
<db-password>: définir une variable d'environnement contenant le mot de passe de l'utilisateurlecloudfacile - -e FRONTEND_APP_URL="http://0.0.0.0:8090" : permet d'indiquer l'url du frontend react qui sera déployé dans le prochain lab. -p 8088:8080 : permet d'exposer le port 8080 du conteneur sur le port 8088 de la machine hôte.
- springboot-image:1.0.0: Utiliser la version
1.0.0de l'imagespringboot-imagecréée à l'étape précédente.
Etape 5: Vérification de l'état du container#
La commande suivante permet de vérifier si le conteneur a bien démarré.
docker ps -a -f name=myawesome-springboot-app
Etape 7: Affichage des logs en mode streaming#
La commande ci-dessous permet d'afficher les logs en mode streaming et vérifier que l'application est bien démarré en cherchant la chaine suivante Tomcat started on port 8080 (http) with context path '/'
docker logs myawesome-springboot-app -f
Etape 6: Accès à l'application#
Vous pouvez accéder à l'interface de l'application en naviguant sur votre browser à l'adresse suivante:
hhttp://0.0.0.0:8088/api/feedback