Docker — présentation
Sommaire
Première fiche du cours Docker. Avant de taper la moindre commande, il faut comprendre ce qu'est un conteneur et en quoi il diffère d'une machine virtuelle.
1. Qu'est-ce que Docker
Docker est une plateforme qui permet d'exécuter des applications dans des conteneurs : des environnements isolés, légers et reproductibles.
Le problème qu'il résout tient en une phrase entendue dans toutes les équipes : « chez moi ça marche ». Une application dépend d'une version de bibliothèque, d'une variable d'environnement, d'un paquet système. Sur le poste du développeur tout fonctionne ; sur le serveur, non.
Docker règle cela en embarquant l'application avec tout ce dont elle a besoin dans une image. Cette image s'exécute à l'identique sur n'importe quelle machine dotée de Docker : poste de développement, serveur de test, serveur de production.
| Apport | Concrètement |
|---|---|
| Portabilité | La même image tourne partout, sans réinstaller de dépendances |
| Isolation | Deux applications incompatibles cohabitent sur la même machine |
| Légèreté | Quelques dizaines de mégaoctets, démarrage en millisecondes |
| Reproductibilité | L'environnement est décrit dans un fichier, versionné avec le code |
| Densité | Beaucoup plus de conteneurs que de VM sur un même serveur |
2. Conteneur ou machine virtuelle
C'est la comparaison attendue systématiquement, à l'écrit comme à l'oral.
| Machine virtuelle | Conteneur | |
|---|---|---|
| Contient | Un système d'exploitation complet | L'application et ses dépendances seulement |
| Noyau | Le sien | Partagé avec l'hôte |
| Taille | Plusieurs gigaoctets | Quelques dizaines de mégaoctets |
| Démarrage | Dizaines de secondes | Quelques millisecondes |
| Isolation | Forte, assurée par l'hyperviseur | Plus faible : namespaces et cgroups du noyau |
| Systèmes possibles | N'importe lequel | Le même noyau que l'hôte |
| Densité sur un serveur | Quelques dizaines | Plusieurs centaines |
MACHINES VIRTUELLES CONTENEURS
┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐
│ App │ │ App │ │ App │ │ App │ │ App │ │ App │
├──────┤ ├──────┤ ├──────┤ ├──────┴─┴──────┴─┴──────┤
│ OS │ │ OS │ │ OS │ │ moteur Docker │
├──────┴─┴──────┴─┴──────┤ ├────────────────────────┤
│ hyperviseur │ │ système d'exploitation│
├────────────────────────┤ ├────────────────────────┤
│ matériel │ │ matériel │
└────────────────────────┘ └────────────────────────┘
Formulation à retenir : une VM virtualise le matériel, un conteneur virtualise le système d'exploitation. C'est pour cela que le conteneur est léger — il ne réembarque pas de noyau — et c'est aussi pour cela que son isolation est moins étanche.
Les deux ne s'opposent pas : en production, on exécute très souvent des conteneurs à l'intérieur de machines virtuelles, pour cumuler la souplesse des premiers et l'isolation des secondes. Voir la fiche Virtualisation.
3. Le vocabulaire
| Terme | Définition |
|---|---|
| Image | Modèle en lecture seule contenant l'application et ses dépendances. Immuable. |
| Conteneur | Instance en cours d'exécution d'une image, avec une couche d'écriture par-dessus. |
| Dockerfile | Fichier texte décrivant la recette de construction d'une image. |
| Registry (registre) | Dépôt d'images. Le plus connu est Docker Hub. On peut en héberger un privé. |
| Tag | Version d'une image : nginx:1.25, ubuntu:22.04. Sans tag, Docker prend latest. |
| Volume | Stockage persistant, indépendant du cycle de vie du conteneur. |
| Réseau Docker | Réseau virtuel reliant plusieurs conteneurs entre eux. |
| Couche (layer) | Chaque instruction du Dockerfile produit une couche, empilée et mise en cache. |
Analogie à réutiliser en épreuve : l'image est à la classe ce que le conteneur est à l'objet. Une seule image, autant de conteneurs qu'on veut, chacun avec son état propre.
4. Comment ça fonctionne
Docker repose sur une architecture client / serveur.
| Composant | Rôle |
|---|---|
Client (docker) | La commande que tu tapes. Elle envoie des requêtes au démon. |
Démon (dockerd) | Le service qui construit les images, lance et surveille les conteneurs. |
| Registre | Stocke et distribue les images. |
Le client et le démon peuvent se trouver sur des machines différentes : c'est ce qui permet de piloter un serveur Docker distant depuis son poste.
Les briques du noyau Linux
| Mécanisme | Ce qu'il apporte |
|---|---|
| Namespaces | L'isolation : chaque conteneur a sa vue des processus, du réseau, des points de montage, des utilisateurs |
| Cgroups | La limitation des ressources : CPU, mémoire, entrées-sorties |
| Union filesystem | L'empilement des couches en lecture seule, avec une couche d'écriture au-dessus |
Comprendre ces trois briques, c'est comprendre pourquoi un conteneur n'est pas une machine : c'est un ou plusieurs processus de l'hôte, simplement cloisonnés et bridés.
5. À quoi ça sert
| Usage | Exemple concret |
|---|---|
| Développement | Monter une base MySQL en une commande, sans l'installer sur son poste |
| Tests | Repartir d'un environnement vierge et identique à chaque exécution |
| Déploiement | Livrer la même image du test à la production |
| Microservices | Découper une application en services indépendants, mis à l'échelle séparément |
| Intégration continue | Exécuter chaque étape du pipeline dans un conteneur jetable |
| Laboratoire | Monter rapidement une maquette : serveur web, annuaire, outil de supervision |
En BTS SIO, c'est le second usage qui te servira le plus : déployer un service (serveur web, base de données, outil de MDM, solution de sauvegarde) sans polluer la machine hôte, et pouvoir tout supprimer proprement.
6. Limites et précautions
| Limite | Conséquence |
|---|---|
| Isolation plus faible qu'une VM | Une faille du noyau hôte affecte tous les conteneurs. Pour des charges non fiables, on isole dans une VM. |
| Même noyau que l'hôte | Pas de conteneur Windows sur un hôte Linux, et réciproquement, sans couche de virtualisation. |
| Données éphémères | Tout ce qui est écrit dans un conteneur disparaît avec lui → volumes obligatoires. |
| Images non maîtrisées | Une image de Docker Hub peut contenir n'importe quoi. Privilégier les images officielles et vérifiées. |
| Exécution en root | Par défaut, le processus tourne en root dans le conteneur. Utiliser l'instruction USER. |
Groupe docker |
Y appartenir équivaut en pratique à être root sur l'hôte. |
Le dernier point mérite d'être compris avant l'installation : un membre du groupe
docker peut lancer un conteneur privilégié montant la racine de l'hôte, et donc tout lire et tout
modifier. Ce n'est pas une commodité, c'est une élévation de privilèges à assumer et à
documenter.
À retenir
- Docker exécute des applications dans des conteneurs isolés et reproductibles
- Il règle le problème du « chez moi ça marche »
- VM = virtualise le matériel | conteneur = virtualise l'OS
- Le conteneur partage le noyau de l'hôte → léger, mais isolation plus faible
- Image = modèle en lecture seule | conteneur = instance en exécution
- L'image est à la classe ce que le conteneur est à l'objet
- Registry = dépôt d'images (Docker Hub) | tag = version
- Architecture client / démon :
dockerparle àdockerd - Trois briques du noyau : namespaces (isolation), cgroups (ressources), union FS (couches)
- Données éphémères par défaut → volumes obligatoires
- Appartenir au groupe
docker= root sur l'hôte