Retour aux articles

Dockeriser efficacement une application Full Stack Java Spring Boot et Angular

Dockeriser efficacement une application Full Stack Java Spring Boot et Angular | Laty Gueye Samba - Développeur Full Stack Dakar Sénégal, Expert Java Spring Boot Angular

Dockeriser efficacement une application Full Stack Java Spring Boot et Angular

Dans le monde du développement logiciel moderne, la conteneurisation est devenue une pratique incontournable pour assurer la portabilité, la cohérence des environnements et la simplification du déploiement. Pour les développeurs Full Stack, comme Laty Gueye Samba, Développeur Full Stack basé à Dakar, Sénégal, expert en Java Spring Boot et Angular, la maîtrise de Docker est essentielle pour gérer des architectures complexes.

Cet article se propose d'explorer les meilleures pratiques pour dockeriser une application Full Stack combinant un backend Java Spring Boot et un frontend Angular. Il mettra en lumière l'importance de cette approche DevOps pour des projets réels, en offrant des solutions concrètes pour optimiser les images Docker et orchestrer les services. L'objectif est de fournir une feuille de route claire pour la conteneurisation, permettant ainsi une intégration et un déploiement continus plus fluides.

La conteneurisation avec Docker transforme la manière dont les applications sont développées, testées et déployées. En isolant les applications et leurs dépendances dans des conteneurs, les développeurs peuvent garantir que leur code fonctionne de manière identique, quel que soit l'environnement d'exécution. Cette approche est particulièrement bénéfique pour les applications Full Stack, où la gestion des dépendances entre le backend Java Spring Boot et le frontend Angular peut rapidement devenir un défi sans un outil comme Docker.

Dockerisation du Backend Java Spring Boot

La dockerisation d'une application Java Spring Boot implique la création d'une image Docker qui contient le code de l'application, la machine virtuelle Java (JVM) et toutes les dépendances nécessaires. Pour construire des images optimisées, il est fortement recommandé d'utiliser des builds multi-étapes afin de réduire la taille finale de l'image et d'améliorer la sécurité. Cela permet de séparer l'environnement de compilation de l'environnement d'exécution.

Un exemple de Dockerfile pour une application Spring Boot pourrait ressembler à ceci :


# Étape 1 : Phase de construction
FROM maven:3.8.6-openjdk-17 AS build
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn clean package -DskipTests

# Étape 2 : Phase d'exécution
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY --from=build /app/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

Dans ce Dockerfile, l'image maven:3.8.6-openjdk-17 est utilisée pour compiler le projet (étape build), puis le JAR compilé est copié dans une image d'exécution plus légère (openjdk:17-jdk-slim). L'application est exposée sur le port 8080, un standard pour les applications Spring Boot, et le point d'entrée configure la JVM pour exécuter le fichier JAR.

Dockerisation du Frontend Angular

La dockerisation d'une application Angular suit un principe similaire à celui du backend, avec une phase de construction et une phase d'exécution. L'application Angular étant un ensemble de fichiers statiques (HTML, CSS, JavaScript), un serveur web léger comme Nginx est couramment utilisé pour les servir une fois qu'ils sont construits. Là encore, un build multi-étapes est primordial pour une image finale compacte.

Voici un exemple de Dockerfile pour une application Angular :


# Étape 1 : Phase de construction
FROM node:18-alpine AS build
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm install
COPY . .
RUN npm run build -- --configuration production

# Étape 2 : Phase d'exécution avec Nginx
FROM nginx:alpine
COPY --from=build /app/dist/ /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

Dans ce Dockerfile, l'image node:18-alpine est utilisée pour installer les dépendances et compiler le projet Angular (étape build). Les fichiers statiques générés sont ensuite copiés vers une image Nginx légère (nginx:alpine), qui servira ces fichiers via le port 80. Il est important de remplacer <nom-de-votre-projet-angular> par le nom réel de votre projet Angular, qui est généralement le nom de votre répertoire dans le dossier dist après la compilation.

Orchestration avec Docker Compose

Pour gérer et exécuter l'application Full Stack complète, y compris le backend Spring Boot, le frontend Angular et potentiellement une base de données, Docker Compose est l'outil idéal. Il permet de définir l'ensemble de l'architecture de l'application dans un fichier docker-compose.yml, facilitant ainsi le démarrage, l'arrêt et la liaison des services.

Un exemple de fichier docker-compose.yml pour une application Full Stack pourrait inclure un service pour le backend, un pour le frontend et un pour une base de données PostgreSQL :


version: '3.8'
services:
  backend:
    build:
      context: ./backend # Chemin vers le répertoire du backend Spring Boot
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    environment:
      SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/mydatabase
      SPRING_DATASOURCE_USERNAME: user
      SPRING_DATASOURCE_PASSWORD: password
    depends_on:
      - db
    networks:
      - app-network

  frontend:
    build:
      context: ./frontend # Chemin vers le répertoire du frontend Angular
      dockerfile: Dockerfile
    ports:
      - "4200:80" # Mapping le port 4200 local au port 80 du conteneur Nginx
    depends_on:
      - backend
    networks:
      - app-network

  db:
    image: postgres:13
    environment:
      POSTGRES_DB: mydatabase
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    volumes:
      - db_data:/var/lib/postgresql/data
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

volumes:
  db_data:

Ce fichier docker-compose.yml définit trois services : backend, frontend et db. Les services sont configurés pour construire leurs images à partir de leurs répertoires respectifs, exposer des ports spécifiques, et communiquer via un réseau Docker interne (app-network). Les variables d'environnement sont utilisées pour configurer la connexion à la base de données pour le backend Spring Boot. Avec une simple commande docker-compose up --build, toute l'application Full Stack peut être démarrée.

Point de vue : développeur full stack à Dakar

Pour un développeur Full Stack à Dakar comme Laty Gueye Samba, travaillant sur des systèmes ERP ou des applications métier complexes, la maîtrise de la conteneurisation et de l'orchestration avec Docker représente un avantage concurrentiel réel sur le marché technologique africain, en pleine expansion. Cette expertise permet non seulement une gestion plus efficace des infrastructures, mais aussi une collaboration améliorée au sein des équipes de développement.

Conclusion

La dockerisation d'une application Full Stack Java Spring Boot et Angular est une étape cruciale vers des pratiques DevOps modernes et efficaces. En suivant les principes de builds multi-étapes et en utilisant Docker Compose pour l'orchestration, les développeurs peuvent créer des environnements de développement et de production cohérents, portables et faciles à gérer. L'adoption de Docker simplifie le déploiement, réduit les problèmes "ça marche sur ma machine" et accélère le cycle de vie du développement logiciel.

L'expertise en Docker pour des applications Java Spring Boot et Angular, comme celle que Laty Gueye Samba développe régulièrement, est une compétence de plus en plus valorisée par les entreprises et les organisations à Dakar et au-delà. Elle permet de construire des architectures robustes et évolutives, prêtes à répondre aux défis des applications modernes.

Pour approfondir vos connaissances sur Docker, il est recommandé de consulter les ressources officielles :

À propos de l'auteur

Laty Gueye Samba est développeur Full Stack basé à Dakar, Sénégal. Spécialiste des écosystèmes Java / Spring Boot et Angular.

Contact : latygueyesamba@gmail.com  |  Dakar, Sénégal