---
title: Pourquoi Docker ?
description: Résoudre le problème « ça marche sur ma machine » avec un environnement reproductible.
---

## Le problème : « ça marche sur ma machine »

Une application ne tourne jamais dans le vide. Elle dépend de tout un environnement :

- une version de runtime, par exemple Node.js 25 ou Python 3.12 ;
- des binaires système, comme OpenSSL ou un client PostgreSQL ;
- des services externes : PostgreSQL 16, un broker, un stockage S3 ;
- une configuration : variables d'environnement, chemins et ports.

Sur une machine de développement, ce contexte existe parce qu'il a été installé au fil du temps. Sur la machine d'un collègue ou sur le serveur de production, il peut être différent ou absent. Le code identique fonctionne alors ici et casse ailleurs : le bug est dans l'environnement.

## La réponse apportée par Docker

Docker empaquette **l'application et son environnement** dans une unité reproductible : l'image.

La même image peut tourner sur le poste de développement, dans la CI et sur le serveur de production. L'environnement n'est plus installé manuellement sur chaque machine : il est livré avec le code.

## Les gains concrets

| Gain | Ce que cela apporte |
| --- | --- |
| Iso dev / prod | La stack locale est construite avec les mêmes briques que la production. |
| Isolation | Chaque service possède ses dépendances. PostgreSQL 16 d'un projet ne gêne pas PostgreSQL 14 d'un autre. |
| Agnostique OS | L'image embarque son userspace Linux ; l'application voit le même environnement sur Mac, Windows ou Linux. |
| Reproductibilité | Un Dockerfile versionné constitue une recette de construction exacte et partageable. |
| Légèreté | Un conteneur partage le noyau de l'hôte, démarre rapidement et consomme moins de mémoire qu'une VM complète. |
| Onboarding | Un nouveau développeur clone le dépôt et lance toute la stack sans installer chaque service à la main. |

## Exemple d'onboarding

Une stack de développement complète peut regrouper PostgreSQL, MinIO, Mailpit, un frontend, un backend et Nginx dans un seul fichier Compose.

```bash
docker compose -f docker-compose.dev.yml up
```

Cette commande remplace une longue liste d'installations manuelles et donne à toute l'équipe le même environnement.

<Callout title="Idée centrale" type="success">
  Docker déplace la complexité de l'installation de la machine vers une description versionnée : le Dockerfile pour une image, puis le fichier Compose pour toute la stack.
</Callout>
