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
Tarif inter / participant
1 400 € HT
📄 Programme (PDF) 📅 Voir les dates

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

Retour en haut