Une appli dans une boîte fermée
Un conteneur est une application rangée dans une boîte fermée, avec tout ce dont elle a besoin pour tourner. Grâce à lui, la même application marche sur ton ordinateur, sur celui du lycée ou sur un serveur lointain.
Le serveur de ton jeu en ligne préféré fait sans doute tourner ses programmes dans des conteneurs. Quand l’un d’eux s’arrête, quelqu’un doit trouver pourquoi, vite.
À la fin de cette leçon
Remarque
Je peux trouver pourquoi un conteneur s’est arrêté.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Image | le modèle figé d’une application, prêt à démarrer | |
| Conteneur | une image en train de tourner, dans sa propre boîte | |
| Journal | les messages qu’un programme écrit pendant qu’il tourne | docker logs worker |
| Volume | un dossier gardé même quand le conteneur disparaît | |
| Machine virtuelle | un faux ordinateur complet qui tourne dans un vrai | |
| Docker | l’outil qui lance et surveille des conteneurs |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une image est une recette, pas un plat
Une image est un paquet figé : le programme et tout ce qu’il lui faut. On ne la modifie pas.
Quand on la démarre, on obtient un conteneur. Tu peux démarrer dix conteneurs depuis une seule image, comme dix gâteaux avec une seule recette.
Un conteneur est plus léger qu’une machine virtuelle
Une machine virtuelle contient un système d’exploitation complet. Elle pèse lourd et met du temps à démarrer.
Un conteneur partage le système de la machine qui l’héberge. Il ne contient que l’application et ses fichiers. C’est pourquoi on en lance des dizaines sur un même serveur.
Exemple : un site web de deux façons
| Critère | Conteneur | Machine virtuelle |
|---|---|---|
| Ce qu’elle contient | Le site et ses fichiers | Un système complet, puis le site |
| Démarrage | Quelques secondes | Une ou deux minutes |
| Place sur le disque | Quelques dizaines de Mo | Plusieurs Go |
| Séparation des applis | Bonne | Totale |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
`docker ps -a` liste tous les conteneurs
Dans ton lab, trois conteneurs t’attendent : web sert une page, cache garde une file de tâches et worker les traite. Démarre le lab, puis attends que web et cache soient prêts.
docker ps -a liste tous les conteneurs, même arrêtés. Sans -a, seuls ceux qui tournent apparaissent.
Liste les conteneurs du lab
docker ps -aAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Lire la colonne STATUS
Regarde la colonne STATUS. web et cache disent Up puis (healthy) : ils tournent et se jugent en bonne santé.
worker dit Exited (1). Il s’est arrêté juste après son démarrage. Le nombre entre parenthèses est son code de sortie, et 1 veut dire « une erreur ».
Le journal dit pourquoi le conteneur s’est arrêté
Un programme qui s’arrête écrit presque toujours une raison avant de partir. Cette raison est dans son journal. Un conteneur arrêté garde son journal.
docker logs worker affiche celui du worker. Puis docker exec lance une commande à l’intérieur d’un conteneur qui tourne : ici, on lit le fichier de réglages dans web.
Lis le journal du worker
docker logs workerAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Lis le fichier de réglages
docker exec web cat /settings/worker.confAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Ce que disent le journal et le fichier
La première ligne du journal commence par worker: cannot start. Elle dit qu’il manque une ligne QUEUE_HOST dans le fichier de réglages.
Le fichier, lui, ne contient que quatre lignes, dont la dernière est POLL_SECONDS=5. Aucune ne nomme la file de tâches. Le journal avait donc raison.
Une erreur fréquente
Attention
Beaucoup pensent qu’un conteneur arrêté a disparu. Il existe toujours, avec son journal. docker ps seul ne montre que ceux qui tournent : utilise docker ps -a pour voir aussi les arrêtés.
Ce qui disparaît, ce qui reste
Un fichier écrit dans un conteneur survit à un redémarrage du conteneur. Il disparaît quand le conteneur est supprimé, ici quand le lab s’arrête.
Un volume est un dossier gardé à part. Dans ton lab, /settings est un volume : ce que tu y écris reste. Voilà pourquoi les réglages importants vivent dans un volume.
Pour aller plus loin : les conteneurs malades
Un conteneur peut tourner et être malade. Son statut dit alors Up 3 minutes (unhealthy).
Ajoute à ta fonction bilan un compteur "malades" pour les conteneurs en marche dont le statut contient unhealthy. Teste-le avec une ligne que tu écris toi-même.