Anaïs Sparesotto
Docker · ConteneursDébutant≈ 2h15 · 8 chapitres

Découverte de Docker

Comprendre les conteneurs, écrire un Dockerfile, orchestrer plusieurs services avec Compose, et déployer dans un environnement reproductible.

À la fin du cours, tu sais

  • Expliquer ce que résout Docker et ce qui le différencie des VMs
  • Écrire un Dockerfile multi-stage propre
  • Orchestrer plusieurs services avec docker compose
  • Persister des données avec des volumes
  • Appliquer les bonnes pratiques de sécurité et de taille d'image

Prérequis

  • Être à l'aise avec un terminal et la ligne de commande
  • Avoir déjà lancé une application en local (Node, Python, Java, peu importe)
  • Pas besoin de connaître les VMs ni Linux en profondeur
Chapitre 11 / 11

Étape 1 sur 11 : Pourquoi Docker ?

Chapitre 1

Pourquoi Docker ?

Avant le comment, le pourquoi. Docker n'est pas un outil magique, c'est une réponse précise à un problème concret que tu as déjà rencontré.

Avant d'apprendre le comment de Docker, il faut comprendre le pourquoi, sinon l'outil reste une suite de commandes magiques qu'on récite sans les saisir. Docker n'est pas une mode : c'est une réponse précise à un problème que tu as forcément déjà rencontré si tu as codé à plusieurs, ou même simplement changé de machine. Ce chapitre pose ce problème et l'idée qui le résout ; tout le reste du cours n'est que la mise en œuvre de cette idée.

Le problème a un nom célèbre : « ça marche sur ma machine ». Ton code fonctionne en local, casse en intégration continue, repasse en préproduction, recasse en production — et tu perds des heures à traquer une version de Node qui diffère, une bibliothèque système absente, une variable d'environnement oubliée. La cause est toujours la même : la divergence d'environnement. La solution de Docker est élégante : plutôt que d'espérer que tous les environnements soient identiques, on empaquette le code avec son environnement (le runtime, les bibliothèques, la configuration) dans un artefact reproductible qui tourne partout à l'identique. Tu décris l'environnement une fois, dans un fichier texte, et cet emballage se lance chez toi, en CI et en prod exactement de la même façon.

Reste à comprendre pourquoi on parle de conteneurs et pas de machines virtuelles, qui isolent aussi les applications. La différence est une question de coût. Une machine virtuelle (VM) virtualise tout le matériel et embarque un système d'exploitation complet : elle démarre en minutes et pèse des gigaoctets. Un conteneur, lui, partage le noyau du système hôte et n'embarque que l'application et ses dépendances : il démarre en secondes et pèse des mégaoctets. La conséquence est spectaculaire — tu peux lancer dix conteneurs sur ton laptop sans le faire ramer, là où dix VM le mettraient à genoux. C'est cette légèreté qui rend la conteneurisation viable aussi bien pour le développement local que pour les architectures en microservices.

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

Le pire ennemi du "ça marche chez moi", c'est la divergence d'environnement. Ton code passe en local, casse en CI, repasse en staging, recasse en prod. Tu perds des heures à diagnostiquer une version de Node qui change, une dépendance système absente, une variable d'environnement oubliée.

Cette divergence vient toujours des mêmes coupables : version d'un runtime, librairies installées au niveau de l'OS, configuration laissée à l'implicite, base de données absente ou en mauvaise version.

La solution : encapsuler l'environnement

L'idée est simple : empaqueter le code et son environnement (runtime, librairies, configuration) dans un artefact reproductible. Cet artefact se lance n'importe où à l'identique, sur ta machine, sur ton CI, en production.

C'est exactement ce que fait Docker. Tu décris l'environnement une fois dans un fichier texte, tu construis une image, et cette image tourne partout pareil.

VM vs conteneur

Les VMs et les conteneurs résolvent le même problème (isoler une application), mais à des coûts très différents.

  • Une VM virtualise tout le matériel et embarque un OS complet (kernel + userspace). Démarrage en minutes, empreinte en Go.
  • Un conteneur partage le kernel de l'OS hôte et n'embarque que l'application avec ses dépendances. Démarrage en secondes, empreinte en Mo.

Conséquence pratique

Tu peux lancer 10 conteneurs sur un laptop sans broncher. 10 VMs feraient ramer la machine. Cette différence d'empreinte est ce qui rend la conteneurisation viable pour le dev local et pour les architectures microservices.

Cas d'usage typiques

  • Environnement de dev cohérent entre tous les membres d'une équipe
  • Pipeline CI/CD reproductible : les tests tournent dans le même environnement que la prod
  • Déploiement en production (microservices, edge, fonctions serverless)
  • Isolation de processus : sandboxer un script non sûr, faire tourner une vieille version d'une lib

Tu veux ce cours pour ton équipe ?

Je peux adapter et animer ce cours pour tes formateur·ices ou tes apprenant·es, en présentiel ou en distanciel. Parlons-en pendant l'audit gratuit.

Réserver un audit gratuit →