Retour aux articles

Adieu le « Ça marche sur ma machine ! » - Docker

Découvrez comment Docker a révolutionné le développement logiciel et mis fin au célèbre problème "ça marche sur ma machine"

Level Sony
Docker DevOps Conteneurisation Développement
Adieu le « Ça marche sur ma machine ! » - Docker
Table des matières

« Ç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.

it works on my machine running on my PC

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.

Nginx running on my PC

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)

  1. Créer votre premier Dockerfile (très simple pour commencer)
  2. Faire docker build -t mon-app .
  3. 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 :

  1. Installez Docker
  2. Lancez docker run hello-world
  3. Testez quelques images du Docker Hub
  4. 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

Apprendre davantage

Commentaires