Docker : conteneuriser ses applications ML
⏱ 55 minDocker résout le problème "ça marche sur ma machine" : un conteneur embarque ton code + ses dépendances + son environnement d'exécution.
Concepts clés
- Image : le blueprint (recette) — défini dans un Dockerfile
- Conteneur : une instance en cours d'exécution d'une image
- Registry : dépôt d'images (Docker Hub, AWS ECR)
Dockerfile pour une API ML
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY src/ ./src/
COPY model.pkl .
EXPOSE 8000
CMD ["uvicorn", "src.main:app", "--host", "0.0.0.0", "--port", "8000"]
Commandes essentielles
docker build -t mon-api-ml:v1 . # construire l'image
docker run -p 8000:8000 mon-api-ml # lancer le conteneur
docker ps # conteneurs actifs
docker logs <id> # voir les logs
docker stop <id> # arrêter
# Docker Compose : orchestrer plusieurs services (API + DB)
docker-compose up -d
Multi-stage build pour réduire la taille de l'image en production :
FROM python:3.11 AS builder
RUN pip install --user -r requirements.txt
FROM python:3.11-slim
COPY --from=builder /root/.local /root/.local
COPY . .
Ressource : Docker Docs — https://docs.docker.com/get-started/
✍️ Exercices de la leçon
2 exercicesFais-les dans l'ordre, dans un vrai fichier .py — pas dans ta tête. Ne déplie la correction qu'après avoir écrit quelque chose, même faux.
Exercice A — Conteneuriser une API de prédiction
Application directe · Tu appliques ce que tu viens de lire.
Prends une API FastAPI qui charge un modèle et expose /predict, puis :
- 1.écris le
Dockerfile - 2.écris un
.dockerignore - 3.construis l'image et lance le conteneur sur le port 8000
- 4.teste l'endpoint avec
curldepuis ta machine - 5.consulte les logs du conteneur, puis arrête-le proprement
Vérifie enfin que l'API répond depuis l'extérieur du conteneur — c'est là que la plupart des gens bloquent la première fois.
Exercice B — L'image de 1,2 Go
Page blanche · Aucun squelette : à toi de choisir la méthode.
Page blanche. Optimisation mesurée.
Ton image Docker fait 1,2 Go. Le déploiement prend huit minutes et coûte cher en stockage et en bande passante.
Réduis-la, et prouve chaque gain.
Ton travail :
1. mesure la taille de départ et identifie où est le poids (quelle couche pèse quoi ?)
2. applique au moins trois optimisations de nature différente
3. mesure après chacune, séparément
4. vérifie que l'image réduite fonctionne toujours — une image légère qui ne démarre pas ne vaut rien
5. dis quelle optimisation a le meilleur rapport gain/complexité
Ne te contente pas de changer l'image de base. Il y a plus à gagner ailleurs.