5 services orchestrés via Docker Compose :
| Service | Image | Rôle | Port |
|---|---|---|---|
db_mongo |
Image custom (mongo:7.0) | Base NoSQL — stocke les articles | — |
db_mysql |
mysql:8.0 | Base SQL — stocke les utilisateurs | — |
admin_mongo |
mongo-express | Interface web MongoDB | 8081 |
admin_mysql |
adminer | Interface web MySQL | 8090 |
api |
Image custom (python:3.12-slim) | API FastAPI hybride | 8001 |
Les bases de données n'exposent aucun port — elles sont uniquement accessibles depuis les autres conteneurs.
TP3/
├── docker-compose.yml
├── .env.example
├── .gitignore
├── api/
│ ├── Dockerfile
│ ├── .dockerignore
│ ├── main.py
│ └── requirements.txt
├── mongo/
│ ├── Dockerfile
│ └── init-scripts/
│ └── 01_init.js
└── mysql/
└── init-scripts/
└── 01_init.sql
- Docker Desktop installé et démarré
1. Configurer l'environnement
cp .env.example .envÉditer .env et renseigner les mots de passe.
2. Démarrer la stack
docker compose up --build -d3. Vérifier que les 5 services sont healthy
docker compose psAttendre que tous les services affichent (healthy).
| Route | Source | Description |
|---|---|---|
GET /posts |
MongoDB | Retourne les 5 articles du blog |
GET /users |
MySQL | Retourne les 4 utilisateurs |
GET /health |
Les deux | État de santé de l'API |
curl http://localhost:8000/posts
curl http://localhost:8000/users- Mongo Express → http://localhost:8081 (login/mdp dans
.env) - Adminer → http://localhost:8080 — Système :
MySQL, Serveur :db_mysql
# Arrêter sans supprimer les données
docker compose down
# Arrêter et supprimer les volumes (repart de zéro)
docker compose down -vLes healthchecks ne vérifient pas uniquement que le processus tourne, ils valident l'intégrité des données :
- MongoDB : vérifie que
blog_db.postscontient exactement 5 documents - MySQL : vérifie que la table
utilisateurscontient exactement 4 lignes - API : vérifie que les routes
/postset/usersrépondent toutes les deux