CI1 : Conteneurs
- Comprendre pourquoi la conteneurisation est essentielle dans un système de Machine Learning.
- Installer et vérifier le bon fonctionnement de Docker sur votre machine.
- Construire une première image Docker contenant une mini-API FastAPI.
- Exécuter un conteneur et exposer un service sur votre machine.
- Démarrer un mini-système multi-conteneurs avec Docker Compose (API + base de données).
- Apprendre à interagir avec des conteneurs (logs, exécution interactive, connexions).
- Préparer l’environnement qui servira de base aux TP suivants.
Installation de Docker et vérification de l’environnement
Dans cette première partie, vous allez installer Docker sur votre machine et vérifier que l’exécution de conteneurs fonctionne correctement.
https://docs.docker.com/get-docker/
- Le composant WSL2 est activé.
- Votre distribution Linux par défaut est bien configurée.
- Docker Desktop utilise le backend WSL2 (paramètres → General → Use the WSL 2 based engine).
- Que Docker Desktop est lancé.
- Que vous avez les permissions nécessaires (Linux : ajoutez votre utilisateur au groupe docker).
- Qu’aucun proxy ou VPN ne bloque l’accès à Docker Hub.
Premiers pas avec Docker : images et conteneurs
Dans cet exercice, vous allez découvrir les commandes Docker fondamentales en manipulant des conteneurs simples.
Construire une première image Docker avec une mini-API FastAPI
Dans cet exercice, vous allez construire votre première image Docker à partir d’un petit service web écrit avec FastAPI. L’objectif est de comprendre la structure d’un Dockerfile et de créer une API simple exposant une route /health.
Étape 1 — Compléter le fichier app.py
On vous fournit ci-dessous un squelette de fichier app.py avec quelques éléments manquants. Complétez les zones indiquées.
Étape 2 — Compléter le Dockerfile
Voici un Dockerfile partiellement rempli. Complétez les instructions manquantes pour :
- Définir une image de base adaptée ;
- Créer un répertoire de travail ;
- Copier votre fichier app.py ;
- Installer les dépendances requises (fastapi, uvicorn) ;
- Démarrer l’application au lancement du conteneur.
Étape 3 — Construire l'image Docker
Exécuter l’API FastAPI dans un conteneur Docker
Vous disposez maintenant d’une image Docker simple-api contenant une mini-API FastAPI. Dans cet exercice, vous allez exécuter cette image dans un conteneur et vérifier que l’API répond correctement sur votre machine.
Étape 1 — Lancer le conteneur
Étape 2 — Tester l’endpoint /health
Ajoutez une capture d’écran de la réponse dans votre rapport.
Étape 3 — Observer les conteneurs en cours d’exécution
- le nom du conteneur,
- l'image utilisée,
- le port mappé.
Étape 4 — Arrêter le conteneur
Démarrer un mini-système multi-conteneurs avec Docker Compose
Dans cette partie, vous allez utiliser Docker Compose pour lancer plusieurs services en une seule commande : une API FastAPI (celle du TP) et une base de données PostgreSQL.
Étape 1 — Préparer la structure des fichiers
Étape 2 — Compléter le fichier docker-compose.yml
On vous propose ci-dessous un squelette de fichier docker-compose.yml incomplet. Votre objectif est de compléter les parties marquées # TODO pour :
- Définir un service db basé sur l’image officielle postgres:16 ;
- Définir un service api qui utilise le Dockerfile du dossier api/ ;
- Configurer les variables d’environnement pour PostgreSQL (utilisateur, mot de passe, base, tous égaux à demo) ;
- Exposer les ports nécessaires pour l’API et la base de données ;
- Spécifier que l’API dépend de la base de données.
- Le service db sera accessible depuis d'autres conteneurs via le hostname db et le port 5432.
- Le service api sera accessible depuis votre machine via http://localhost:8000.
Étape 3 — Démarrer la stack avec Docker Compose
Étape 4 — Tester à nouveau l’endpoint /health
Étape 5 — Arrêter proprement les services
- Arrêter les services avec docker compose down ;
- Arrêter un conteneur individuel avec docker stop <id>.
Interagir avec la base de données PostgreSQL dans un conteneur
Dans un système de Machine Learning en production, les données sont presque toujours stockées dans une base de données ou un data warehouse. Dans ce TP, nous utilisons PostgreSQL, exécuté lui aussi dans un conteneur Docker.
Pré-requis
Assurez-vous que votre stack Docker Compose est bien démarrée :
Étape 1 — Se connecter au conteneur PostgreSQL
Étape 2 — Exécuter quelques commandes SQL simples
Étape 3 — Comprendre la connexion depuis d'autres services
- le hostname à utiliser ;
- le port ;
- l’utilisateur et le mot de passe ;
- le nom de la base.
Étape 4 — Nettoyer
Déboguer des conteneurs Docker : commandes essentielles et bonnes pratiques
Le débogage est une compétence essentielle lorsque vous travaillez avec des systèmes distribués ou multi-conteneurs. Dans cet exercice, vous allez découvrir quelques outils simples mais indispensables pour diagnostiquer des problèmes dans vos services Docker.
Étape 1 — Afficher les logs d’un service
- l’API démarre correctement ;
- l’API reçoit une requête /health.
Étape 2 — Entrer dans un conteneur en cours d’exécution
Étape 3 — Redémarrer un service
Étape 4 — Conteneur qui ne démarre pas : diagnostic
Étape 5 — Supprimer des conteneurs et images
Questions de réflexion et consignes pour le rendu
Pour conclure ce premier TP, vous devez répondre à quelques questions de réflexion et préparer un rendu conforme aux consignes ci-dessous.
Questions de réflexion
Consignes pour le rendu
- le répertoire api/ avec votre fichier app.py et votre Dockerfile ;
- votre fichier docker-compose.yml ;
- un dossier reports/ contenant un fichier rapport.md rédigé en Markdown.
- les réponses aux questions de réflexion ;
- les captures d’écran demandées dans les exercices ;
- toutes remarques personnelles sur les difficultés rencontrées.