Docker
Empaqueter une application avec tout ce dont elle a besoin (code, dépendances, OS minimal) dans un conteneur qui tourne à l'identique sur n'importe quelle machine.
À quoi ça sert
Le problème classique du dev : « Ça marche sur ma machine, mais pas sur celle de mon collègue / pas en prod. » La cause ? Une version de Python différente, une lib système manquante, un OS pas tout à fait pareil…
Docker résout ça en empaquetant ton app dans une image qui contient tout ce qui est nécessaire pour la faire tourner. On lance ensuite cette image sous forme de conteneur, et le résultat est identique partout : sur ton PC, sur celui d'un collègue, sur un serveur, dans le cloud.
Trois concepts à retenir :
- Dockerfile — la recette qui décrit comment construire l'image.
- Image — le résultat figé de la recette (un « modèle »).
- Conteneur — une instance en exécution d'une image.
Le Dockerfile est la recette de cuisine, l'image est le plat préparé sous vide, le conteneur est le plat réchauffé et servi.
Un exemple d'usage
Tu as développé une petite API en Python avec FastAPI. Tu veux que ton collègue puisse
la lancer sans installer Python ni les dépendances. Tu lui donnes simplement ton code
avec un Dockerfile. De son côté, il fait :
docker build -t mon-api .
docker run -p 8000:8000 mon-api
Et c'est tout. L'API tourne sur http://localhost:8000, sans qu'il ait
eu à installer quoi que ce soit d'autre que Docker.
How-to : installer et utiliser Docker
-
Installer Docker Desktop
Docker Desktop est l'application qui regroupe le moteur Docker et une interface graphique. Disponible pour Windows, macOS et Linux.
- Télécharge depuis docker.com/products/docker-desktop
- Sous Windows, active WSL 2 (Docker Desktop te guidera).
- Sous Linux, tu peux aussi installer juste
docker-cevia le gestionnaire de paquets.
Vérifie l'installation :
bashdocker --version docker run hello-worldLa commande
hello-worldtélécharge une mini image de test et la lance. Si tu vois un message « Hello from Docker! », tu es prêt. -
Préparer un mini projet Python
Crée un dossier et deux fichiers :
bashmkdir hello-docker && cd hello-dockerFichier
app.py:pythonfrom fastapi import FastAPI app = FastAPI() @app.get("/") def root(): return {"message": "Hello from Docker!"}Fichier
requirements.txt:txtfastapi==0.115.0 uvicorn==0.32.0 -
Écrire le Dockerfile
Crée un fichier
Dockerfile(sans extension) à la racine du projet :dockerfile# Image de base : Python officiel, version slim (légère) FROM python:3.12-slim # Dossier de travail à l'intérieur du conteneur WORKDIR /app # Copier d'abord les requirements pour profiter du cache COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # Puis copier le code COPY . . # Port exposé par l'application EXPOSE 8000 # Commande lancée au démarrage du conteneur CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]Astuce cacheOn copie
requirements.txtavant le reste du code : si seul ton code change, Docker réutilise la couche d'install des dépendances et le build est presque instantané. -
Construire l'image
Le flag
-tdonne un nom (un « tag ») à ton image. Le.indique le contexte de build (ici le dossier courant).bashdocker build -t hello-docker .Vérifie qu'elle est bien là :
bashdocker images -
Lancer le conteneur
-p 8000:8000publie le port 8000 du conteneur sur le port 8000 de ta machine.--rmsupprime le conteneur quand il s'arrête.bashdocker run --rm -p 8000:8000 hello-dockerOuvre http://localhost:8000 dans ton navigateur. Tu devrais voir le JSON
{"message": "Hello from Docker!"}. -
Configurer VS Code
VS Code propose une extension officielle qui simplifie énormément la vie avec Docker.
- Installe l'extension Docker de Microsoft (
ms-azuretools.vscode-docker). - Une nouvelle icône Docker apparaît dans la barre latérale : tu y vois tes images et tes conteneurs.
- Clic-droit sur un Dockerfile → Build Image… pour builder sans passer par le terminal.
- Clic-droit sur un conteneur → Attach Shell pour entrer dedans.
Bonus : Dev ContainersAvec l'extension Dev Containers, tu peux ouvrir tout ton projet à l'intérieur d'un conteneur. VS Code, l'éditeur, l'autocomplétion et les extensions Python tournent dans l'environnement Docker — zéro install sur ta machine hôte.
- Installe l'extension Docker de Microsoft (
-
Bonus : Docker Compose pour plusieurs services
Quand ton app a besoin de plusieurs conteneurs (ex. ton API + une base PostgreSQL), tu décris ça dans un fichier
docker-compose.yml:yamlservices: api: build: . ports: - "8000:8000" depends_on: - db db: image: postgres:16 environment: POSTGRES_PASSWORD: secretEt tu lances tout en une commande :
bashdocker compose up
Aide-mémoire des commandes
# Images
docker build -t <nom> . # builder une image
docker images # lister les images
docker rmi <image> # supprimer une image
# Conteneurs
docker run -p 8000:8000 <img> # lancer
docker run -d <img> # lancer en arrière-plan
docker ps # conteneurs actifs
docker ps -a # tous les conteneurs
docker stop <id> # arrêter
docker rm <id> # supprimer
docker logs <id> # voir les logs
docker exec -it <id> bash # ouvrir un shell dedans
# Compose
docker compose up # démarrer la stack
docker compose down # tout arrêter et nettoyer
# Nettoyage
docker system prune # nettoyer ce qui ne sert plus
Pour aller plus loin
- Documentation officielle : docs.docker.com
- Bonnes pratiques pour les Dockerfiles : docs.docker.com/.../best-practices
- Hub d'images officielles : hub.docker.com