Dans la section précédente, nous avons lancé notre premier conteneur avec la commande hello-world.
Mais cela soulève une question importante : D’où vient ce conteneur ?
La réponse est simple : il est créé à partir d’une image Docker.
Pour bien comprendre Docker, il faut retenir une idée essentielle :
Un conteneur est une instance en cours d’exécution d’une image.
Autrement dit, l’image représente le modèle, tandis que le conteneur correspond à l’application qui fonctionne réellement.
L’analogie du plan de construction
Restons dans l’esprit du chantier naval utilisé comme fil conducteur dans cette formation.
Imaginez que vous souhaitiez construire plusieurs bateaux identiques. Pour cela, vous disposez d’un plan de construction qui sert de référence. À partir de ce plan, le chantier peut fabriquer autant de bateaux que nécessaire.
Dans Docker, le principe est similaire :
| Élément réel | Docker |
|---|---|
| Plan de construction | Image |
| Bateau construit | Conteneur |
| Chantier | Docker Engine |
Une seule image peut donc servir à créer autant de conteneurs que nécessaire, exactement comme un même plan permet de construire plusieurs bateaux.
Une image est un modèle figé
Une image Docker est un template en lecture seule. Cela signifie qu’elle ne peut pas être modifiée une fois créée. Elle constitue une base immuable qui sert uniquement à lancer des conteneurs.
Lorsqu’un conteneur est démarré, Docker prend l’image et ajoute par-dessus une couche d’écriture propre au conteneur. Cette couche permet au conteneur de fonctionner, d’écrire des fichiers ou de modifier son environnement.
Schéma simplifié :
Image Docker (lecture seule)
│
▼
Couche d'écriture du conteneur
│
▼
Conteneur en fonctionnementSi le conteneur est supprimé, cette couche d’écriture disparaît avec lui, mais l’image reste intacte. C’est pour cette raison que les conteneurs sont considérés comme éphémères par défaut.
Nous verrons plus tard comment conserver les données grâce aux volumes.
Que contient une image Docker ?
Une image regroupe tout ce dont une application a besoin pour fonctionner. L’objectif est de garantir que l’application se lancera de la même manière, quel que soit l’endroit où elle est exécutée.
Prenons l’exemple d’une image destinée à héberger un site web en PHP. Elle peut intégrer un système Linux minimal, un serveur web et l’environnement PHP nécessaire.
Schéma simplifié :
Image PHP + Apache
│
├── Linux minimal
├── Apache
├── PHP
└── Extensions PHP
Grâce à cette approche, le même environnement peut être utilisé sur un ordinateur personnel, un serveur ou dans le cloud, avec exactement le même résultat. C’est l’une des grandes forces de Docker : la reproductibilité des environnements.
Les images sont construites par couches
Une image Docker n’est pas un simple fichier unique. Elle est composée de plusieurs couches appelées layers. Chaque couche correspond généralement à une étape de construction, comme l’installation d’un logiciel, l’ajout de fichiers ou une configuration particulière.
Voici un exemple simplifié :
Layer 1 : Linux
Layer 2 : Installation Apache
Layer 3 : Installation PHP
Layer 4 : Configuration
Cette organisation apporte un avantage important : Docker peut réutiliser les couches déjà existantes. Si plusieurs images utilisent la même base Linux ou la même installation de PHP, ces couches seront partagées.
Cela permet de réduire l’espace disque utilisé et d’accélérer les téléchargements et la construction des images.
À retenir
Une image Docker peut être vue comme le modèle de base d’une application. Elle est immuable, composée de plusieurs couches et sert uniquement à créer des conteneurs.
On peut résumer le concept ainsi :
- Image = modèle
- Conteneur = instance en cours d’exécution
Maintenant que nous savons ce qu’est une image Docker, une nouvelle question apparaît naturellement : où sont stockées ces images et comment les récupérer ?
Dans la prochaine leçon, nous allons découvrir le véritable supermarché des images Docker.