Docker, c'est quoi ? Une analogie simple
Imagine que tu dois envoyer un jeu vidéo à un ami. Sur ton ordinateur, il fonctionne parfaitement, mais sur le sien, il plante à cause d'une version différente de Windows, d'un pilote manquant ou d'une bibliothèque incompatible. C'est le cauchemar classique du développeur : "Ça marche sur ma machine !".
Docker résout ce problème avec la conteneurisation. Pense à un conteneur maritime : il transporte des marchandises de façon standardisée, isolée et sécurisée, quel que soit le cargo. Un conteneur Docker fait la même chose pour une application : il empaquète le code, les bibliothèques, les outils système et les paramètres dans une unité isolée et portable. Ainsi, ton application s'exécutera de manière identique sur n'importe quelle machine disposant de Docker, que ce soit ton PC, l'ordinateur du lycée ou un serveur en ligne.
Les concepts clés à maîtriser
Pour bien utiliser Docker, il faut comprendre trois éléments fondamentaux.
L'Image Docker : la recette de cuisine
Une image est un modèle en lecture seule, une sorte de "recette" ou de "moule" qui définit tout ce dont ton application a besoin pour fonctionner. Elle contient un système d'exploitation minimal (souvent Linux), ton code Python, les bibliothèques comme NumPy ou Flask, et la configuration. On ne modifie pas directement une image ; on en crée une nouvelle à partir d'une existante. Les images sont stockées dans des registries, comme Docker Hub (une immense bibliothèque publique).
Le Conteneur : l'instance en cours d'exécution
Un conteneur est une instance vivante et exécutable d'une image. C'est comme lorsque tu suis la recette pour faire un gâteau : l'image est la recette, le conteneur est le gâteau lui-même, cuit et prêt à être mangé. Tu peux démarrer, arrêter, supprimer et exécuter plusieurs conteneurs à partir d'une même image. Chaque conteneur est isolé des autres et de ton système hôte.
Le Dockerfile : le plan de construction
Le Dockerfile est un simple fichier texte qui contient toutes les instructions pour construire une image. C'est ton script de construction. Voici un exemple ultra-simple pour une app Python :
# Utilise l'image officielle Python légère
FROM python:3.9-slim
# Définit le répertoire de travail dans le conteneur
WORKDIR /app
# Copie le fichier requirements.txt d'abord (pour optimiser le cache)
COPY requirements.txt .
# Installe les dépendances
RUN pip install --no-cache-dir -r requirements.txt
# Copie le reste du code de l'application
COPY . .
# Commande à exécuter au lancement du conteneur
CMD ["python", "mon_script.py"]
Ton premier conteneur : un Hello World en Python
Passons à la pratique ! Assure-toi d'avoir installé Docker Desktop sur ta machine.
Étape 1 : Télécharger une image
Ouvre ton terminal (ou PowerShell) et tape :docker pull python:3.9-slim
Cette commande télécharge l'image Python officielle depuis Docker Hub.
Étape 2 : Lancer un conteneur interactif
Maintenant, lançons un conteneur basé sur cette image et entrons à l'intérieur :docker run -it --name mon_premier_conteneur python:3.9-slim bash
Explication des options :-it : mode interactif avec un terminal.--name : donne un nom à ton conteneur.bash : la commande à exécuter (un shell).
Tu es maintenant à l'intérieur du conteneur ! Le prompt a changé. Tape :python3 -c "print('Hello World depuis mon conteneur Docker !')"
Félicitations ! Tu viens d'exécuter du code Python dans un environnement isolé. Tape exit pour quitter le conteneur.
Étape 3 : Gérer ses conteneurs
Quelques commandes essentielles :docker ps -a : liste tous les conteneurs (même arrêtés).docker start mon_premier_conteneur : redémarre un conteneur arrêté.docker stop mon_premier_conteneur : arrête le conteneur.docker rm mon_premier_conteneur : supprime le conteneur.
Pourquoi Docker est-il utile en NSI et pour tes projets ?
Docker n'est pas réservé aux ingénieurs seniors ! En tant que lycéen en NSI, il peut te simplifier la vie :
- Environnements de projet reproductibles : Plus de "ça marche pas sur la machine du prof". Tu partages juste ton Dockerfile et ton code. Ton projet, avec toutes ses dépendances précises, tournera à l'identique partout.
- Expérimenter sans risque : Tu veux tester une nouvelle base de données (comme PostgreSQL), un serveur web (Nginx), ou une version spécifique de Python ? Lance-les dans des conteneurs. Si ça ne te plaît pas, supprime le conteneur : ton système principal reste propre et intact.
- Préparer le supérieur et le monde pro : Docker est un standard incontournable dans le développement moderne (DevOps). Le découvrir maintenant te donne une longueur d'avance considérable pour tes études post-bac et tes stages.
- Déployer facilement : Pour un projet de type site web (avec Flask ou Django), Docker te permet de le "conteneuriser" et de le déployer sur des plateformes cloud comme Heroku, AWS ou OVH en quelques commandes.
Aller plus loin : Docker Compose pour les projets multi-services
Pour un projet plus complexe (un site web avec une base de données et un cache), gérer plusieurs conteneurs à la main devient fastidieux. Docker Compose est l'outil qu'il te faut. Il te permet de décrire toute ton application (ses différents services) dans un seul fichier YAML (docker-compose.yml) et de la lancer d'une seule commande.
Exemple simplifié pour une app web Flask + Redis :
version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
depends_on:
- redis
redis:
image: "redis:alpine"
Tu lances le tout avec : docker-compose up. Magique !
Docker ouvre un monde de possibilités. Commence par maîtriser les bases : images, conteneurs, Dockerfile. Expérimente avec tes scripts Python de NSI. Tu verras, une fois le déclic passé, tu ne pourras plus t'en passer pour tes projets !
