Docker
| Fiche express | |
|---|---|
| Type | Moteur de conteneurisation d'applications, architecture client/serveur |
| Composants | Docker CLI · dockerd · containerd · runc |
| Standard | OCI (Open Container Initiative) — formats image et runtime |
| Isolation | Namespaces (cloisonnement) + Cgroups (limitation de ressources) |
| Diffère de | LXC (conteneurs système multi-processus) — Docker cible un conteneur = un processus applicatif |
| Voir aussi | Docker install CE · Dockerfile · Docker containers · Docker images · Docker network · Docker volumes · Kubernetes |
Docker est une plateforme de conteneurisation qui permet d'empaqueter une application avec toutes ses dépendances dans une unité isolée et portable — le conteneur — puis de l'exécuter de façon reproductible sur n'importe quelle machine dotée du moteur Docker. L'isolation repose sur des mécanismes déjà présents dans le noyau Linux (voir Namespaces et Cgroups) : Docker n'invente pas la conteneurisation, il en industrialise l'usage avec un format d'image standardisé, un outillage de build (voir Dockerfile) et une distribution des images via des registres (Docker Hub ou un registre privé).
Conteneurs vs machines virtuelles
Un conteneur diffère fondamentalement d'une machine virtuelle : il ne virtualise pas de matériel et ne fait pas tourner de noyau propre. Un conteneur est un (ou plusieurs) processus de l'hôte, isolé par des Namespaces (vue propre des PID, du réseau, des montages...) et limité par des Cgroups (CPU, mémoire...), avec son propre système de fichiers superposé. Conséquence directe : le démarrage est quasi instantané, l'empreinte mémoire est réduite au strict nécessaire de l'application, mais l'isolation est moins étanche qu'avec une VM puisque le noyau est partagé avec l'hôte. C'est le compromis à avoir en tête pour arbitrer entre conteneurs et VM (voir aussi LXC pour des conteneurs « système » plus proches d'une VM légère qu'un conteneur applicatif Docker).
Architecture client/serveur
Docker fonctionne selon un modèle client/serveur, avec plusieurs couches qui se sont progressivement détachées du binaire historique docker :
- Docker CLI — le client en ligne de commande (
docker) que l'utilisateur pilote ; il dialogue avec le démon via une API REST (généralement le socket local/var/run/docker.sock). - dockerd (Docker Engine daemon) — le serveur qui reçoit les commandes, gère les images, les réseaux et les volumes, et délègue l'exécution effective des conteneurs.
- containerd — un runtime de haut niveau (aujourd'hui un projet CNCF indépendant, utilisé aussi par Kubernetes) qui gère le cycle de vie des conteneurs, le transfert d'images et délègue à son tour la création du conteneur proprement dite.
- runc — le runtime OCI de bas niveau qui crée effectivement le conteneur en assemblant Namespaces et Cgroups autour du processus, conformément à la spécification OCI (Open Container Initiative).
Le détail de cette chaîne d'exécution et des primitives noyau sous-jacentes est développé dans Docker containers.
Installer Docker
L'installation (dépôts CentOS/RHEL et Debian, paquets docker-ce/docker-ce-cli/containerd.io, configuration de base du démon) est détaillée dans Docker install CE.
Construire et manipuler des images
Une image Docker est un modèle immuable en couches (layers) à partir duquel des conteneurs sont instanciés. On la construit de façon reproductible avec un Dockerfile, ou de façon ponctuelle par docker commit sur un conteneur modifié à la main. Le détail du format en couches, de l'inspection et du nettoyage des images est couvert dans Docker images ; les instructions de build et les bonnes pratiques de rédaction d'un Dockerfile sont couvertes dans Dockerfile.
docker search nginx # chercher une image sur le registre
docker pull nginx:latest # récupérer une image
docker images # lister les images locales
docker run -d --name web nginx:latest # créer et démarrer un conteneur
docker ps # lister les conteneurs actifs
Exécuter et gérer des conteneurs
Le cycle de vie d'un conteneur (création, arrêt, suppression, exécution interactive, options de redémarrage et de limitation de ressources) est détaillé dans Docker containers.
Réseau et stockage
Deux sujets à part entière, chacun avec sa propre page :
- Docker network — modèle réseau (CNM), drivers bridge/host/overlay/macvlan, publication et exposition de ports.
- Docker volumes — persistance des données au-delà du cycle de vie d'un conteneur, bind mounts, volumes nommés et
tmpfs.
Sécurité
Docker s'appuie sur deux mécanismes noyau complémentaires pour restreindre ce qu'un conteneur peut faire, au-delà de la simple isolation : les namespaces côté isolation (dont le user namespace remapping) et les capabilities côté droits — un conteneur ne tourne pas avec un accès root complet au noyau par défaut, seulement un sous-ensemble restreint de privilèges.
Interfaces graphiques
Docker s'utilise avant tout en ligne de commande, mais des interfaces web ou de bureau existent pour visualiser images, conteneurs, réseaux et volumes. D'anciens projets comme docker-ui, shipyard ou horizon ont existé sur ce créneau mais sont aujourd'hui peu ou plus maintenus ; pour une interface actuelle, on se tourne plutôt vers Portainer (web, orienté exploitation), Lens ou k9s (plutôt orientés Kubernetes mais aussi utilisés en contexte conteneurs).
Au-delà d'un hôte unique
Docker embarque nativement un mode d'orchestration multi-hôtes, Docker Swarm (docker swarm, docker service, docker stack), utilisé notamment par certains drivers réseau overlay (voir Docker network). Pour une orchestration à plus grande échelle, avec un écosystème plus riche, voir la catégorie Kubernetes.