Skip to content

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-app au 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é mooadboard sur le conteneur lecloudfacile-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'utilisateur lecloudfacile
  • -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.0 de l'image springboot-image créé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