Docker Containerization expliqué simplement (avec schémas et vrai code)

Docker Containerization : l'essentiel en un article — vrai code, schémas et étapes concrètes, extraits d'un cours de 41 leçons.

Docker Containerization expliqué simplement (avec schémas et vrai code)

Un guide qui va droit au but : Docker Containerization décortiqué avec des schémas, des exemples concrets et des commandes testées. Tout vient d'un cours structuré de 12 chapitres — en voici le meilleur.

tl;dr
  • Installer une VM UBUNTU
  • Découvrir docker
  • Commandes essentielles
  • Dockerfile
  • Containeriser Flask
~$ cat ./parcours.md # Docker Containerization — 11 chapitres
01
Installer une VM UBUNTU
→ Télécharger VirtualBox et l'ISO Ubuntu→ Créer la VM et installer Ubuntu+ 1 autres leçons
02
Découvrir docker
→ C'est quoi Docker et pourquoi l'utiliser ?→ Installer Docker sur Ubuntu+ 1 autres leçons
03
Commandes essentielles
→ Les commandes fondamentales→ Ports, volumes et variables d'environnement+ 2 autres leçons
04
Dockerfile
→ Anatomie d'un Dockerfile→ Construire et lancer sa première image+ 1 autres leçons
05
Containeriser Flask
→ Rappel Flask et création de l'application→ Dockerfile Flask, build et run+ 1 autres leçons
06
Containeriser FastAPI
→ Rappel FastAPI et création de l'API→ Dockerfile FastAPI et Swagger UI+ 1 autres leçons
07
Containeriser Streamlit
→ Rappel Streamlit et création du dashboard→ Dockerfile Streamlit et configuration headless+ 1 autres leçons
08
Docker-compose
→ Pourquoi Docker Compose ?→ Projet Flask + PostgreSQL+ 2 autres leçons
🏁
Projet final (+ 3 chapitres en chemin)
→ Tu repars avec un projet concret et démontrable

Anatomie d'un Dockerfile

NOTEObjectif — Comprendre ce qu'est un Dockerfile, maîtriser chaque instruction et écrire votre premier Dockerfile pour créer une image Docker personnalisée.
WARNINGAvant de commencer — Ce lab suppose que vous avez suivi les modules précédents. Si vous rencontrez des conflits de noms, de ports déjà utilisés, ou si Docker ne répond plus correctement, utilisez ces commandes pour repartir de zéro :
bash
# Arrêter TOUS les conteneurs en cours
docker stop $(docker ps -a -q)

# Supprimer TOUS les conteneurs
docker rm $(docker ps -a -q)

# Supprimer TOUTES les images (optionnel)
docker rmi $(docker images -q)

# Forcer la suppression si une image résiste
docker rmi -f $(docker images -q)
⚠ Attention — Ces commandes suppriment tout. Ne les utilisez que si vous voulez repartir d'un environnement propre. L'option -f (force) supprime même les images utilisées par des conteneurs.

Objectifs pédagogiques

TIPÀ l'issue de ce module — Vous serez capable de maîtriser ces compétences essentielles.

Qu'est-ce qu'un Dockerfile ?

Un Dockerfile est un fichier texte qui contient une série d'instructions pour construire une image Docker. C'est comme une recette de cuisine : chaque instruction est une étape qui transforme l'image de base en votre image personnalisée.

NOTEAnalogie — Pensez au Dockerfile comme à une recette de cuisine :
  • FROM = Les ingrédients de base (la farine, le beurre...)
  • WORKDIR = Le plan de travail (la table de cuisine)
  • COPY = Ajouter des ingrédients (le sucre, les œufs...)
  • RUN = Préparer (mélanger, cuire...)
  • EXPOSE = Indiquer la présentation (le plat de service)
  • CMD = Servir le plat (la commande finale)

Image de base

Le Dockerfile part toujours d'une image existante (FROM). On ne part jamais de zéro.

Instructions

Chaque ligne est une instruction qui modifie l'image : copier des fichiers, installer des paquets, configurer...

Image finale

Le résultat est une image personnalisée prête à être lancée avec docker run.

Les instructions principales

FROM – Image de base

Toute première instruction d'un Dockerfile. Elle définit l'image de départ sur laquelle on construit.

output
FROM python:3.11-slim
NOTEExplication — On utilise l'image officielle Python 3.11 en version slim (version allégée, sans les outils inutiles). Cela nous donne un système Linux avec Python 3.11 déjà installé.

WORKDIR – Dossier de travail

Définit le répertoire de travail dans le conteneur. Toutes les instructions suivantes (COPY, RUN, CMD) s'exécuteront dans ce dossier.

output
WORKDIR /app
TIPBonne pratique — Utilisez toujours WORKDIR plutôt que RUN cd /app. WORKDIR crée le dossier automatiquement s'il n'existe pas et persiste pour toutes les instructions suivantes.

COPY – Copier des fichiers

Copie des fichiers depuis votre machine (le « contexte de build ») vers le conteneur.

output
COPY . .

Le premier . = le dossier courant sur votre machine. Le deuxième . = le WORKDIR dans le conteneur (/app).

Layers, cache et bonnes pratiques

NOTEObjectif — Comprendre le système de layers et de cache de Docker, et appliquer les bonnes pratiques pour écrire des Dockerfiles optimisés.
WARNINGAvant de commencer — Ce lab suppose que vous avez suivi les modules précédents. Si vous rencontrez des conflits de noms, de ports déjà utilisés, ou si Docker ne répond plus correctement, utilisez ces commandes pour repartir de zéro :
bash
# Arrêter TOUS les conteneurs en cours
docker stop $(docker ps -a -q)

# Supprimer TOUS les conteneurs
docker rm $(docker ps -a -q)

# Supprimer TOUTES les images (optionnel)
docker rmi $(docker images -q)

# Forcer la suppression si une image résiste
docker rmi -f $(docker images -q)
⚠ Attention — Ces commandes suppriment tout. Ne les utilisez que si vous voulez repartir d'un environnement propre. L'option -f (force) supprime même les images utilisées par des conteneurs.

Objectifs pédagogiques

TIPÀ l'issue de ce module — Vous serez capable de maîtriser ces compétences essentielles.

Chaque instruction = 1 layer

Quand Docker exécute un Dockerfile, chaque instruction (FROM, RUN, COPY, etc.) crée un nouveau layer (couche). Une image Docker est une pile de layers empilés les uns sur les autres.

output
FROM python:3.11-slim     ← Layer 1 (image de base)
WORKDIR /app              ← Layer 2
COPY requirements.txt .   ← Layer 3
RUN pip install ...       ← Layer 4
COPY . .                  ← Layer 5
CMD ["python", "app.py"]  ← Layer 6 (métadonnées)
NOTEPourquoi des layers ? — Les layers permettent à Docker de :
  • Partager les layers communs entre plusieurs images (ex : toutes les images Python partagent le même layer de base)
  • Mettre en cache les layers pour accélérer les builds
  • Réduire l'espace disque en ne stockant chaque layer qu'une seule fois

Le cache Docker

Docker met en cache chaque layer. Lors d'un rebuild, Docker vérifie si un layer a changé. Si rien n'a changé, il réutilise le layer caché au lieu de le reconstruire.

WARNINGRègle fondamentale — Si un layer change, tous les layers suivants sont reconstruits, même s'ils n'ont pas changé. C'est pourquoi l'ordre des instructions est crucial.

Mauvais ordre vs bon ordre

MAUVAIS : requirements après COPY . .

output
FROM python:3.11-slim
WORKDIR /app
COPY . .                            ← Tout le code source
RUN pip install -r requirements.txt ← Installation des dépendances
CMD ["python", "app.py"]
WARNINGProblème — À chaque modification de votre code (même un espace dans app.py), le layer COPY . . change. Comme il est avant RUN pip install, Docker doit réinstaller toutes les dépendances à chaque build. Sur un projet avec beaucoup de dépendances, cela peut prendre plusieurs minutes.

BON : requirements avant COPY . .

output
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .             ← Seulement les dépendances
RUN pip install -r requirements.txt ← Installation (caché si requirements.txt n'a pas changé)
COPY . .                            ← Le code source (change souvent)
CMD ["python", "app.py"]
TIPAvantage — Quand vous modifiez votre code source, seul le layer COPY . . change. Les dépendances (pip install) sont cachées et ne sont pas réinstallées. Le build passe de plusieurs minutes à quelques secondes.

Mauvais ordre

Bon ordre

Démonstration : observer le cache

TIPExercice guidé — Observons le cache en action avec deux builds successifs.

Étape 1 : Créer le projet

bash
mkdir ~/demo-cache
cd ~/demo-cache

Créez requirements.txt :

bash
touch requirements.txt
nano requirements.txt

Construire et lancer sa première image

NOTEObjectif — Construire votre première image Docker à partir d'un Dockerfile, la lancer, et comprendre le rôle du fichier .dockerignore.
WARNINGAvant de commencer — Ce lab suppose que vous avez suivi les modules précédents. Si vous rencontrez des conflits de noms, de ports déjà utilisés, ou si Docker ne répond plus correctement, utilisez ces commandes pour repartir de zéro :
bash
# Arrêter TOUS les conteneurs en cours
docker stop $(docker ps -a -q)

# Supprimer TOUS les conteneurs
docker rm $(docker ps -a -q)

# Supprimer TOUTES les images (optionnel)
docker rmi $(docker images -q)

# Forcer la suppression si une image résiste
docker rmi -f $(docker images -q)
⚠ Attention — Ces commandes suppriment tout. Ne les utilisez que si vous voulez repartir d'un environnement propre. L'option -f (force) supprime même les images utilisées par des conteneurs.

Objectifs pédagogiques

TIPÀ l'issue de ce module — Vous serez capable de maîtriser ces compétences essentielles.

Créer le projet

Étape 1 : Créer le dossier du projet

bash
mkdir ~/mon-premier-docker
cd ~/mon-premier-docker

Étape 2 : Créer le script Python

Créez un fichier hello.py :

bash
touch hello.py
nano hello.py

Collez ce contenu, puis sauvegardez (Ctrl + O, Entrée, Ctrl + X) :

output
print("Bonjour depuis Docker !")
TIPAstuce rapide — Vous pouvez créer le fichier directement depuis le terminal :
bash
echo 'print("Bonjour depuis Docker !")' > hello.py

Vérifiez le contenu du fichier :

bash
cat hello.py

Étape 3 : Créer le Dockerfile

Créez un fichier nommé Dockerfile (sans extension) :

bash
touch Dockerfile
nano Dockerfile

Collez ce contenu, puis sauvegardez (Ctrl + O, Entrée, Ctrl + X) :

output
FROM python:3.11-slim
WORKDIR /app
COPY hello.py .
CMD ["python", "hello.py"]
va-plus-loin

Cet article couvre les extraits les plus utiles — le cours complet Docker Containerization (12 chapitres, 41 leçons, exercices corrigés et projet final) t'emmène jusqu'au bout.

./acceder-au-cours-complet cours gratuit : Maîtriser Claude Code

FAQ

Combien de temps pour apprendre Docker Containerization ?
Avec une progression structurée (12 chapitres, 41 leçons courtes et pratiques), on atteint un niveau opérationnel en quelques semaines à raison de 30 à 60 minutes par jour. L'important est de pratiquer chaque notion immédiatement.
Faut-il des prérequis ?
Des bases en informatique suffisent. Si tu sais utiliser un terminal et lire du code simple, tu es prêt.
Par où commencer concrètement ?
Reproduis les commandes de cet article, puis suis le cours complet Docker Containerization : il enchaîne les 41 leçons dans l'ordre, avec exercices et projet final.

📬 Tu veux recevoir ce type de guide chaque semaine ? Abonne-toi gratuitement — code réel, zéro blabla.