01

Découvrir Docker

Concepts fondamentaux de la conteneurisation

Avant de taper la moindre commande, il est impératif de comprendre un changement de paradigme fondamental : un conteneur n'est absolument pas une Machine Virtuelle (VM). C'est un processus système isolé, léger, éphémère et jetable. Cette subtilité dicte toutes les bonnes pratiques d'architecture moderne (Microservices, DevOps).

Qu'est-ce que Docker ?

Docker est une plateforme logicielle libre (à l'origine) de conteneurisation. Elle permet d'empaqueter une application avec la totalité de son environnement d'exécution (bibliothèques, dépendances, configuration système) dans une unité logicielle standardisée appelée conteneur.

🚢 L'Analogie du Port de Commerce Avant les années 1950, le transport maritime était un cauchemar : on chargeait des tonneaux, des sacs, diverses marchandises sur des bateaux au hasard. Puis est arrivé le Conteneur de transport standard (EVP). Aujourd'hui, on ne se soucie plus de ce qu'il y a dedans : tous les bateaux, grues et trains du monde sont conçus pour porter cette boîte standardisée.

Docker applique exactement ce concept au logiciel : peu importe que vous codiez en Python, Node.js ou Java. Docker embarque votre code et vos dépendances dans une boîte standard que n'importe quel serveur Linux dans le monde saura exécuter à l'identique. Le fameux "Pourtant, ça marche sur ma machine !" devient de l'histoire ancienne.

Conteneur vs Machine Virtuelle

< Architecture VM />

App A
Libs / Bins
App B
Libs / Bins
Guest OS
~ 10-50 Go
Guest OS
~ 10-50 Go
Hyperviseur (VMWare, Hyper-V...)
Serveur Physique (Host OS)

< Architecture Docker />

Conteneur A
App + Libs
Conteneur B
App + Libs
Docker Engine
Système d'exploitation (Host OS)
Serveur Physique

Contrairement à la VM qui émule du matériel virtuel et emporte tout un système d'exploitation complet (lourd en RAM et en stockage), un conteneur partage directement le noyau (Kernel) Linux de l'hôte de manière transparente, et ce avec Zéro overhead matériel. Résultat : un conteneur démarre en quelques millisecondes et vous pouvez en exécuter plusieurs dizaines/centaines sur un simple PC.

⚠️ Le secret technique de l'isolation Linux Docker n'a en fait pas inventé la conteneurisation au sens strict, il l'a rendue accessible et user-friendly (auparavant réservée aux experts via LXC). Docker exploite massivement deux fonctionnalités fondamentales du noyau Linux :
  • Namespaces (Espace de noms) : Isole les processus pour leur mentir. Le conteneur croit qu'il est seul dans le système avec son propre réseau et file système.
  • cgroups (Control Groups) : Bloque et limite les ressources d'un groupe. Le conteneur ne peut pas faire crasher le serveur hôte en consommant 100% de la RAM ou du CPU de force.

Architecture Globale de Docker

Le fonctionnement de Docker repose sur une architecture Client-Serveur très stricte qui permet l'agilité :

  • Docker Daemon (`dockerd`) : Le cœur du système. C'est le serveur local (qui tourne en tâche de fond sur votre PC/serveur). Il écoute les requêtes de l'API REST Docker et réalise le travail lourd : création, exécution des conteneurs, gestion du trafic réseau, nettoyage des volumes.
  • Docker CLI (`docker`) : Le client que vous tapez dans votre terminal. Il ne fait rien d'autre que de traduire vos commandes en appels d'API HTTP vers le Daemon. (Note: Le client et le Daemon peuvent être sur des machines opposées, connectés via TCP).
  • Registry (Docker Hub, GitHub Container Registry) : Les bibliothèques publiques cloudisées où résident des millions d'images prêtes à l'emploi. Si vous demandez de lancer `nginx`, et que le Daemon ne le trouve pas localement, il va contacter le Registry pour opérer un `docker pull` magique à la volée.