Ce compte rendu documente les étapes et les résultats du TP2 portant sur l'utilisation de Docker et Docker Compose pour containeriser une application MERN . Ce projet vise à renforcer la compréhension des concepts de conteneurisation et d'orchestration des applications.
Les principaux objectifs de ce TP étaient :
- Containerisation des applications : Apprendre à utiliser Docker pour créer des images et des conteneurs.
- Orchestration avec Docker Compose : Découvrir comment gérer plusieurs conteneurs en utilisant Docker Compose.
- Déploiement d'une application MERN : Comprendre les spécificités du déploiement d'une application MERN en environnement Docker.
mern-app/
├── client/
│ ├── Dockerfile
│ ├── package.json
│ ├── src/
│ └── public/
├── server/
│ ├── Dockerfile
│ ├── package.json
│ ├── src/
│ └── routes/
├── docker-compose.yml
-
Création des Dockerfiles 1.1 Dockerfile pour le Serveur (Express)
FROM node:lts-alpine WORKDIR /app COPY package*.json ./ RUN npm install COPY . . EXPOSE 5000 CMD ["npm","start"]
1.2 Dockerfile pour le Client (React)
FROM node:lts-alpine WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build RUN npm install -g serve EXPOSE 3000 CMD ["serve", "-s", "build", "-l", "3000"]
-
Création du Réseau Docker Un réseau Docker a été créé pour permettre la communication entre les conteneurs :
docker network create mern-network
-
Exécution de MongoDB Un conteneur MongoDB a été lancé pour servir de base de données :
docker run -d --name mongodb --network mern-network mongo
-
Exécution des Conteneurs du Serveur et du Client
- docker run -d --name server --network mern-network -p 5000:5000 mern-server - docker run -d --name client --network mern-network -p 3000:3000 mern-client
Ensuite, on procède à la création d’un fichier Docker Compose pour automatiser la gestion des services. Grâce à Docker Compose, on centralise le déploiement, la configuration des connexions entre les conteneurs, et la mise en place d'un environnement cohérent pour l'application.
- Création du Fichier Docker Compose
version: "3.8"
services:
mongodb:
image: mongo
container_name: mongodb
networks:
- mern-network
ports:
- "27017:27017"
server:
build: ./server
container_name: server
networks:
- mern-network
ports:
- "5000:5000"
depends_on:
- mongodb
environment:
- MONGO_URI=mongodb://mongodb:27017/mern-app
- PORT=5000
client:
build: ./client
container_name: client
networks:
- mern-network
ports:
- "3000:3000"
depends_on:
- server
networks:
mern-network:
driver: bridge
-
Volume
Dans le fichier Docker Compose, aucune configuration de volume n'est définie pour le service MongoDB. Cela signifie que les données seront stockées dans le système de fichiers temporaire du conteneur. En
conséquence, si le conteneur est supprimé, toutes les données seront perdues. 7.1 Configuration d'un volume pour MongoDBservices: mongodb: image: mongo container_name: mongodb volumes: - mongodb_data:/data/db ports: - "27017:27017" ..... volumes: mongodb_data: driver: local
7.2 Explication du volume
-mongodb_data:/data/db : Cette ligne définit un volume Docker qui mappe le répertoire de données de MongoDB (/data/db) vers un volume persistant nommé mongodb_data. -driver: local: Cette option spécifie que le volume utilise le pilote local par défaut de Docker pour stocker les données sur le système hôte.
7.3 Recréer les conteneurs :
- docker-compose down : arrête et supprime les conteneurs existants - docker-compose up --build : recrée les conteneurs avec la nouvelle configuration
Voici quelques captures d'écran de l'application :