« Ça marche sur ma machine ! »
Cette phrase, vous l’avez tous entendue (ou prononcée). Moi, je l’ai dite au moins une dizaine de fois pendant mes projets en terminale. Et mes profs aussi, d’ailleurs, quand ils essayaient de faire tourner mon code sur leur ordinateur…
Cette semaine, on a commencé à parler d’environnements de développement, de dépendances, de virtualisation… et là, le prof a lancé : « Aujourd’hui, on va voir Docker. Ça va régler 90 % de vos problèmes de “ça marche pas chez moi”. »
J’avoue : au début, j’étais sceptique. Encore un outil à installer, encore des commandes bizarres… Mais après deux-trois TP, j’ai compris pourquoi tout le monde en parlait comme d’une révolution. Et en creusant un peu l’histoire (parce que le prof nous avait demandé de faire une petite recherche), j’ai réalisé que Docker n’était pas né de nulle part.

L’histoire rapide de Docker (ce que j’ai retenu en cherchant sur le net)
Tout commence en 2008-2010 à Paris, avec un Français : Solomon Hykes. Il cofonde une startup appelée dotCloud, une plateforme PaaS (Platform as a Service) un peu comme Heroku, où les développeurs pouvaient déployer leurs apps facilement. En interne, dotCloud utilisait déjà des conteneurs Linux pour isoler les applications des clients. Mais c’était compliqué et pas très accessible.
En 2013, Solomon Hykes et son équipe décident de sortir le moteur de conteneurs qu’ils avaient développé en interne. Ils l’appellent Docker et le rendent open source lors d’une présentation à PyCon US en mars 2013. Le logo avec la baleine bleue arrive vite après (inspiré des conteneurs maritimes, bien sûr).
Le succès est fulgurant :
- En 2014, Docker sort sa version 1.0 et passe de « truc sympa » à « outil incontournable »
- Les grosses boîtes (Google, Red Hat, AWS…) commencent à l’adopter
- En parallèle, des concurrents/rivaux apparaissent (CoreOS avec rkt, etc.), mais Docker gagne grâce à sa simplicité et son écosystème (Docker Hub, Dockerfile ultra-lisible)
- Plus tard viendra Kubernetes (2014, par Google), qui s’appuie massivement sur les conteneurs Docker au début
Bref, aujourd’hui, Docker c’est déjà l’outil standard pour packager et déployer des applications de façon fiable, que ce soit en dev, en CI/CD ou en prod.
Comment j’ai découvert Docker (mon petit parcours perso)
Au début du cours, on a juste fait des commandes toutes faites :
docker run hello-world
docker run -d -p 8080:80 nginx
Et là… waouh. En 5 secondes, un vrai serveur web Nginx qui tourne sur mon PC, sans rien installer manuellement. J’ai ouvert localhost:8080 et j’ai vu la page par défaut. Magique.

Ensuite, on est passé à des trucs plus concrets :
- Lancer un conteneur Python pour faire des exos sans polluer mon ordi
- Utiliser une image PostgreSQL pour tester une base de données en local
- Créer notre premier Dockerfile pour un petit projet Flask ou Node.js
Le moment où j’ai vraiment tilté, c’est quand on a cloné le repo Git d’un camarade. Lui il était sous Windows + WSL, moi sous Ubuntu natif. Avant Docker : conflits de versions Python, problèmes de pip, chemins absolus qui cassent…
Avec Docker : docker-compose up et ça tourne chez tout le monde. Exactement pareil.
Les concepts que j’ai retenus (et que je note ici pour ne pas oublier)
Image : le « moule » figé
Comme une recette + ingrédients prêts à l’emploi. Une image est immutable : une fois créée, elle ne change pas.
Conteneur : une instance en cours d’exécution
Le plat prêt à manger. Un conteneur est lancé à partir d’une image et peut être démarré, arrêté, supprimé.
Dockerfile : la recette écrite
Le fichier que tu versionnes dans ton Git, qui décrit comment construire ton image.
Docker Hub : le « GitHub des images »
Le registre public avec des versions officielles (nginx, python, postgres…) et des milliers d’images communautaires.
Étape 1 – Installer Docker (version actuelle)
Choisissez votre OS :
- Windows 10 / 11 Pro - Docker Desktop (WSL 2 ou Hyper-V)
- macOS - Docker Desktop
- Linux (Ubuntu 24.04 / 22.04, Debian 12, Fedora…) - docker.io ou script officiel
Ligne magique la plus courante sur Linux récent :
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh ./get-docker.sh --dry-run
sudo usermod -aG docker $USER
# puis se déconnecter / reconnecter
Vérifiez :
docker --version
# devrait afficher quelque chose comme Docker version 27.x.x ou plus
Pour des instructions d’installation détaillées, consultez la documentation officielle Docker.
Étape 2 – Lancer votre premier conteneur (le Hello World de Docker)
docker run hello-world
Vous devriez voir un joli message de bienvenue.
Étape 3 – Quelque chose de plus intéressant
# Un site web en 1 ligne
docker run -d -p 8080:80 --name mon-site nginx
Ouvrez votre navigateur à http://localhost:8080
Vous voyez la page d’accueil Nginx !
Arrêter et supprimer :
docker stop mon-site
docker rm mon-site
Étape 4 – Jouer avec une image populaire
# Python tout prêt
docker run -it --rm python:3.13 bash
Vous êtes maintenant dans un conteneur avec Python 3.13 fraîchement installé !
# À l'intérieur du conteneur :
python --version
pip install requests
python -c "import requests; print(requests.get('https://httpbin.org/ip').text)"
exit
Le conteneur disparaît tout seul grâce à --rm.
Les 7 commandes Docker à connaître le premier jour
docker pull nginx # Télécharger une image
docker images # Voir les images locales
docker run -d -p 80:80 nginx # Lancer en arrière-plan + redirection port
docker ps # Voir les conteneurs qui tournent
docker ps -a # Voir TOUS les conteneurs (même arrêtés)
docker logs <nom-conteneur> # Voir les logs
docker stop <nom-conteneur> # Arrêter proprement
Exemple concret : Projet d’examen
Pour un exemple pratique de Docker en action avec docker , consultez ce projet d’examen :
Projet d’examen Docker - Une architecture microservices complète utilisant Docker Compose pour démontrer l’isolation des services et la reproductibilité des environnements.
Prochaine étape naturelle (demain ou après-demain)
- Créer votre premier Dockerfile (très simple pour commencer)
- Faire
docker build -t mon-app . - Lancer votre propre application en conteneur
Exemple ultra-minimal (Node.js) :
# Utilise l'image Node.js 20 basée sur Alpine (légère)
FROM node:20-alpine
# Définit le répertoire de travail dans le conteneur
WORKDIR /app
# Copie tous les fichiers du projet dans le conteneur
COPY . .
# Installe les dépendances npm
RUN npm install
# Commande à exécuter au démarrage du conteneur
CMD ["node", "index.js"]
Résumé – Ce que vous devez retenir aujourd’hui
Une image = blueprint immutable
Un conteneur = processus qui tourne à partir d’une image
docker run = la commande magique pour lancer
Les ports se publient avec -p hôte:conteneur
Tout est jetable et reproductible
Commandes de base que je garde en favoris :
docker pull python:3.11-slim
docker run -it --rm python:3.11-slim bash
docker build -t mon-app .
docker run -p 5000:5000 mon-app
Pourquoi ça a changé ma façon de bosser
Avant : je passais 40 % du temps à configurer l’environnement, 60 % à coder.
Avec Docker : 95 % à coder, 5 % à écrire deux lignes dans un Dockerfile.
Et surtout : plus de disputes en groupe sur « mais pourquoi ça marche pas chez moi ? ». Le prof avait raison : Docker règle vraiment ce problème-là.
Conclusion
Docker, c’est pas juste un outil de plus. C’est une façon de penser le développement : portable, reproductible, isolé.
Si vous débutez, ne vous prenez pas la tête avec tous les détails techniques. Commencez simple :
- Installez Docker
- Lancez
docker run hello-world - Testez quelques images du Docker Hub
- Créez votre premier Dockerfile
Et vous verrez : très vite, vous ne pourrez plus vous en passer.
Adieu le « ça marche sur ma machine ! »
Pour aller plus loin
Documentation officielle
- Documentation Docker
- Docker Hub
- Référence Dockerfile
- Documentation Docker Compose
- Bonnes pratiques pour écrire des Dockerfiles
