Images et conteneurs : le plan et l’objet construit
Si vous ne devez retenir qu'un seul guide de ce parcours avant de passer à la pratique, c'est celui-ci.
Vous avez déjà croisé les deux mots « image » et « conteneur » dans les guides précédents. Il est temps de les définir précisément, parce que toute la suite du parcours repose dessus.
L'image : un plan immuable
Une image Docker est un modèle en lecture seule qui contient tout ce qu'il faut pour faire fonctionner une application : son code, le langage nécessaire pour l'exécuter, les bibliothèques dont elle dépend, et les instructions de démarrage. Une image ne fait rien par elle-même. Elle ne s'exécute pas. Elle décrit, une fois pour toutes, ce que sera l'application une fois lancée.
Une image ne change jamais après sa création. Si vous devez modifier quelque chose, vous ne changez pas l'image existante : vous en construisez une nouvelle, à partir des instructions mises à jour. Vous découvrirez comment construire une image vous-même à partir du guide 10 de ce parcours.
Le conteneur : une instance réellement en cours d'exécution
Un conteneur est ce que vous obtenez lorsque vous exécutez une image. C'est une instance réelle, active, qui tourne à un instant donné sur votre ordinateur : elle a ses propres processus, sa propre mémoire, son propre système de fichiers temporaire. Un conteneur peut être démarré, arrêté, relancé, ou supprimé.
Une image ressemble à un plan de construction immuable. Un conteneur ressemble à un bâtiment réellement construit à partir de ce plan. Le plan ne change jamais tout seul ; le bâtiment construit, lui, peut être occupé, modifié en surface, puis démoli. Cette analogie aide à retenir la distinction entre « description » et « instance réelle », mais elle s'arrête là : contrairement à un plan de construction physique, une image Docker peut donner naissance à autant de conteneurs que vous le souhaitez, en quelques secondes, et sans coût de construction répété.
Pourquoi plusieurs conteneurs peuvent venir de la même image
Comme une image est un simple modèle, rien n'empêche de créer plusieurs conteneurs à partir d'elle. Chaque conteneur reste indépendant des autres : il a son propre état, ses propres processus, et un conteneur qui plante ou qui s'arrête n'affecte pas les autres conteneurs créés à partir de la même image. C'est exactement ce mécanisme qui permet à une entreprise de faire tourner cinquante instances identiques d'une même application, chacune isolée des autres.
Pourquoi supprimer un conteneur ne supprime pas son image
C'est une confusion très fréquente chez les débutants, et elle disparaît dès que la distinction précédente est claire. Le conteneur est une instance construite à partir de l'image, pas l'image elle-même. Supprimer un conteneur, c'est démolir le bâtiment ; l'image, le plan qui a permis de le construire, reste intacte, stockée sur votre ordinateur, prête à servir pour créer un nouveau conteneur à tout moment.
C'est aussi pour cette raison qu'un conteneur est considéré comme jetable : le supprimer et en recréer un identique à partir de la même image est une opération normale et sans risque, tant qu'aucune donnée importante n'a été stockée uniquement à l'intérieur de ce conteneur. Vous reverrez cette idée en détail au guide 18, consacré aux volumes.
Le résumé à garder en tête
- Une image est un modèle immuable, en lecture seule, qui ne s'exécute pas.
- Un conteneur est une instance réelle en cours d'exécution, créée à partir d'une image.
- Une même image peut donner naissance à plusieurs conteneurs indépendants.
- Supprimer un conteneur ne touche jamais à l'image dont il provient.
Vérifiez que vous avez compris
Vous supprimez un conteneur créé à partir d'une image nommée mini-carnet. Pouvez-vous encore créer un nouveau conteneur à partir de cette même image mini-carnet juste après ?
Oui, sans aucun problème. L'image reste stockée sur votre ordinateur indépendamment des conteneurs créés à partir d'elle. Supprimer un conteneur ne supprime jamais l'image qui a servi à le créer ; vous pouvez recréer un conteneur identique à partir de cette image autant de fois que nécessaire.