Containeuriser une application Python avec Docker
Objectifs :
- Comprendre les fondamentaux de Docker et la différence avec une machine virtuelle
- Écrire un Dockerfile efficace, sécurisé et reproductible pour une application Python
- Orchestrer plusieurs services avec docker-compose (API, base de données, Redis)
- Optimiser ses images avec multi-stage builds et le cache Docker
- Publier ses images sur un registry et déployer un conteneur sur le cloud
Objectifs :
- Comprendre les fondamentaux de Docker et la différence avec une machine virtuelle
- Écrire un Dockerfile efficace, sécurisé et reproductible pour une application Python
- Orchestrer plusieurs services avec docker-compose (API, base de données, Redis)
- Optimiser ses images avec multi-stage builds et le cache Docker
- Publier ses images sur un registry et déployer un conteneur sur le cloud
Public visé
- Développeurs Python souhaitant industrialiser le déploiement de leurs applications
- Data scientists et ML engineers confrontés à des problématiques de portabilité d'environnement
- DevOps juniors souhaitant maîtriser l'écosystème Docker côté Python
Objectifs pédagogiques
- Comprendre ce qu'est un conteneur et ses différences avec une VM
- Installer et configurer Docker Desktop et son écosystème
- Utiliser la ligne de commande Docker : images, conteneurs, volumes, réseaux
- Écrire un Dockerfile efficace pour une application Python
- Appliquer les bonnes pratiques : images légères, sécurité, reproductibilité
- Utiliser docker-compose pour orchestrer plusieurs services
- Conteneuriser une API Python (FastAPI ou Flask) avec base de données
- Optimiser les images avec multi-stage builds et cache Docker
- Publier ses images sur un registry (Docker Hub, GHCR, Azure, AWS)
- Déployer un conteneur Python sur une plateforme cloud
- Diagnostiquer et déboguer les problèmes courants
Prérequis
- Python intermédiaire : avoir déjà écrit et exécuté des scripts et petites applications
- Aisance en ligne de commande (Linux, macOS ou WSL sous Windows)
- Notions de base sur les environnements virtuels Python (venv, virtualenv)
- Notions de Git : clone, commit, push
- Poste avec droits admin pour installer Docker Desktop
- Aucune connaissance préalable de Docker n'est exigée
Méthodes pédagogiques
- Alternance de théorie (30%) et de pratique (70%)
- Live coding : construction en direct de Dockerfiles et de stacks docker-compose
- Pédagogie par l'erreur : démonstration des anti-patterns Python / Docker fréquents
- Pédagogie par la comparaison : même application dockerisée de 3 manières différentes
- Projet fil rouge : chaque participant conteneurise et déploie son propre projet
- Cheat sheet Docker, templates de Dockerfiles Python et guide de bonnes pratiques remis aux stagiaires (accès pérenne)
Programme détaillé
JOUR 1 — Fondamentaux Docker et premier conteneur Python
- Qu'est-ce qu'un conteneur ? Différence avec une VM
- Cas d'usage : reproductibilité, déploiement, isolation
- Anatomie : image, conteneur, layer, registry
- Installation et configuration de Docker Desktop
- Première image : docker run hello-world, docker pull python
- Commandes essentielles : images, ps, exec, logs, stop, rm
- Volumes : persistance des données, montage
- Réseaux : bridge, host, création d'un réseau personnalisé
- Explorer Docker Hub : choisir une image de base
- Structure d'un Dockerfile : instructions essentielles
- FROM : choisir la bonne image de base (python:3.12-slim vs alpine)
- WORKDIR, COPY, RUN : construire son environnement
- Gestion des dépendances Python : requirements.txt, pyproject.toml
- ENTRYPOINT vs CMD : quand utiliser quoi
- Variables d'environnement : ENV, ARG, build-time vs runtime
- Bonnes pratiques sécurité : utilisateur non-root, scan d'image
- Le fichier .dockerignore : ce qu'il ne faut pas embarquer
- Premier build et premier run d'une application Python conteneurisée
■ Travaux pratiques :
→ TP1 : Dockeriser un script Python simple (ex. scraping ou traitement de fichiers)
→ TP2 : Dockeriser une application FastAPI minimaliste et l'exécuter localement
→ TP3 : Ajouter la gestion des variables d'environnement et des volumes persistants
JOUR 2 — docker-compose, optimisation et déploiement
- Pourquoi docker-compose : orchestrer plusieurs services
- Anatomie d'un fichier docker-compose.yml
- Networks : communication entre services
- Volumes nommés : persistance des bases de données
- Health checks et depends_on : ordre de démarrage et résilience
- Profiles : activer / désactiver des services selon les environnements
- Cas concret : FastAPI + PostgreSQL + Redis orchestrés en une commande
- Optimiser les images Python : multi-stage builds
- Cache Docker : ordonner les instructions pour optimiser les rebuilds
- Mesurer et réduire la taille d'une image (de 1 Go à 150 Mo)
- Publier une image sur un registry
- Docker Hub : comptes publics et privés, taux limite
- GitHub Container Registry (GHCR) : intégration avec GitHub Actions
- Azure Container Registry et AWS ECR : introduction
- Tags et versioning : latest vs tags explicites, bonnes pratiques
- Pipeline GitHub Actions : build et push automatique d'une image Python
- Déployer un conteneur sur le cloud : Render, Railway, Fly.io
- Azure Container Apps et AWS App Runner : introduction rapide
- Débogage : docker logs, docker exec, inspection d'image
- Problèmes classiques : permissions, port, volumes, réseau
■ Travaux pratiques — Projet final :
→ Chaque participant conteneurise son propre projet Python
→ Dockerfile optimisé en multi-stage + docker-compose pour l'environnement de dev
→ Image publiée sur un registry et conteneur déployé sur Render ou Railway
→ Démonstration individuelle et revue collective des choix techniques
Évaluation
- Test de positionnement en début de formation
- Évaluations formatives : revue individuelle des Dockerfiles, débogage collectif
- QCM final de 25 questions (Jour 2) — critère de réussite : 60%
- Présentation et démonstration live du projet conteneurisé
- Attestation de fin de formation délivrée
Public visé
- Développeurs Python souhaitant industrialiser le déploiement de leurs applications
- Data scientists et ML engineers confrontés à des problématiques de portabilité d'environnement
- DevOps juniors souhaitant maîtriser l'écosystème Docker côté Python
Objectifs pédagogiques
- Comprendre ce qu'est un conteneur et ses différences avec une VM
- Installer et configurer Docker Desktop et son écosystème
- Utiliser la ligne de commande Docker : images, conteneurs, volumes, réseaux
- Écrire un Dockerfile efficace pour une application Python
- Appliquer les bonnes pratiques : images légères, sécurité, reproductibilité
- Utiliser docker-compose pour orchestrer plusieurs services
- Conteneuriser une API Python (FastAPI ou Flask) avec base de données
- Optimiser les images avec multi-stage builds et cache Docker
- Publier ses images sur un registry (Docker Hub, GHCR, Azure, AWS)
- Déployer un conteneur Python sur une plateforme cloud
- Diagnostiquer et déboguer les problèmes courants
Prérequis
- Python intermédiaire : avoir déjà écrit et exécuté des scripts et petites applications
- Aisance en ligne de commande (Linux, macOS ou WSL sous Windows)
- Notions de base sur les environnements virtuels Python (venv, virtualenv)
- Notions de Git : clone, commit, push
- Poste avec droits admin pour installer Docker Desktop
- Aucune connaissance préalable de Docker n'est exigée
Méthodes pédagogiques
- Alternance de théorie (30%) et de pratique (70%)
- Live coding : construction en direct de Dockerfiles et de stacks docker-compose
- Pédagogie par l'erreur : démonstration des anti-patterns Python / Docker fréquents
- Pédagogie par la comparaison : même application dockerisée de 3 manières différentes
- Projet fil rouge : chaque participant conteneurise et déploie son propre projet
- Cheat sheet Docker, templates de Dockerfiles Python et guide de bonnes pratiques remis aux stagiaires (accès pérenne)
Programme détaillé
JOUR 1 — Fondamentaux Docker et premier conteneur Python
- Qu'est-ce qu'un conteneur ? Différence avec une VM
- Cas d'usage : reproductibilité, déploiement, isolation
- Anatomie : image, conteneur, layer, registry
- Installation et configuration de Docker Desktop
- Première image : docker run hello-world, docker pull python
- Commandes essentielles : images, ps, exec, logs, stop, rm
- Volumes : persistance des données, montage
- Réseaux : bridge, host, création d'un réseau personnalisé
- Explorer Docker Hub : choisir une image de base
- Structure d'un Dockerfile : instructions essentielles
- FROM : choisir la bonne image de base (python:3.12-slim vs alpine)
- WORKDIR, COPY, RUN : construire son environnement
- Gestion des dépendances Python : requirements.txt, pyproject.toml
- ENTRYPOINT vs CMD : quand utiliser quoi
- Variables d'environnement : ENV, ARG, build-time vs runtime
- Bonnes pratiques sécurité : utilisateur non-root, scan d'image
- Le fichier .dockerignore : ce qu'il ne faut pas embarquer
- Premier build et premier run d'une application Python conteneurisée
■ Travaux pratiques :
→ TP1 : Dockeriser un script Python simple (ex. scraping ou traitement de fichiers)
→ TP2 : Dockeriser une application FastAPI minimaliste et l'exécuter localement
→ TP3 : Ajouter la gestion des variables d'environnement et des volumes persistants
JOUR 2 — docker-compose, optimisation et déploiement
- Pourquoi docker-compose : orchestrer plusieurs services
- Anatomie d'un fichier docker-compose.yml
- Networks : communication entre services
- Volumes nommés : persistance des bases de données
- Health checks et depends_on : ordre de démarrage et résilience
- Profiles : activer / désactiver des services selon les environnements
- Cas concret : FastAPI + PostgreSQL + Redis orchestrés en une commande
- Optimiser les images Python : multi-stage builds
- Cache Docker : ordonner les instructions pour optimiser les rebuilds
- Mesurer et réduire la taille d'une image (de 1 Go à 150 Mo)
- Publier une image sur un registry
- Docker Hub : comptes publics et privés, taux limite
- GitHub Container Registry (GHCR) : intégration avec GitHub Actions
- Azure Container Registry et AWS ECR : introduction
- Tags et versioning : latest vs tags explicites, bonnes pratiques
- Pipeline GitHub Actions : build et push automatique d'une image Python
- Déployer un conteneur sur le cloud : Render, Railway, Fly.io
- Azure Container Apps et AWS App Runner : introduction rapide
- Débogage : docker logs, docker exec, inspection d'image
- Problèmes classiques : permissions, port, volumes, réseau
■ Travaux pratiques — Projet final :
→ Chaque participant conteneurise son propre projet Python
→ Dockerfile optimisé en multi-stage + docker-compose pour l'environnement de dev
→ Image publiée sur un registry et conteneur déployé sur Render ou Railway
→ Démonstration individuelle et revue collective des choix techniques
Évaluation
- Test de positionnement en début de formation
- Évaluations formatives : revue individuelle des Dockerfiles, débogage collectif
- QCM final de 25 questions (Jour 2) — critère de réussite : 60%
- Présentation et démonstration live du projet conteneurisé
- Attestation de fin de formation délivrée