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.
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 />
Libs / Bins
Libs / Bins
~ 10-50 Go
~ 10-50 Go
< Architecture Docker />
App + Libs
App + Libs
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.
- 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.