Lab Docker : apprendre conteneurs, journaux et redémarrages en réparant un service en panne
Ce lab explique ce qu’est un conteneur en donnant à chaque élève trois conteneurs dont un est en panne exprès : une page web, une file d’attente et un worker qui s’arrête dès qu’il démarre. L’élève découvre pourquoi avec docker ps et docker logs, regarde à l’intérieur d’un voisin en bonne santé avec docker exec, corrige le réglage manquant et relance le worker avec docker restart.
Ce n’est pas un lab d’attaque. Chaque copie n’a aucune route vers internet ni vers un autre élève, et le docker du terminal n’agit que sur les trois conteneurs de la copie de l’élève.
Ce que les élèves apprennent
Ce qu’est un conteneur et ce que disent les colonnes de docker ps, y compris qu’un conteneur arrêté est toujours là tant qu’il n’est pas supprimé et n’apparaît qu’avec docker ps -a. Comment lire le journal d’un service pour comprendre ce qui ne va pas, comment exécuter une commande dans un conteneur en marche et comment en redémarrer un. Et l’idée autour de laquelle le lab est construit : les fichiers propres d’un conteneur survivent à un redémarrage mais disparaissent quand le lab s’arrête, alors qu’un volume nommé est conservé. Il convient à une introduction aux conteneurs dans une unité d’informatique, de réseaux ou de DevOps.
Le lancer dans votre navigateur
Le lab démarre la page web et la file d’attente et attend qu’elles soient saines. Le worker est ensuite démarré et s’arrête aussitôt, ce qui est l’exercice : c’est lui qui ne tourne pas.
- Ouvrir la page Conteneur. Ouvrez « Créer » dans la barre et choisissez « Lancer un conteneur ». Tout le monde peut ouvrir la page, et le lab Git et le lab SQL se lancent sans compte. Tous les autres labs demandent un compte gratuit : créez-en un, connectez-vous, puis appuyez sur « Démarrer ».
- Trouver le lab. La carte « Laboratoires d’exemple » liste tous les exemples. Trouvez Docker basics.
- Appuyer sur Démarrer. « Démarrer » le lance tel quel, en un clic. « Modifier le fichier d’abord » ouvre le fichier compose pour que vous puissiez le changer avant de démarrer.
- L’ouvrir. Sur la page du lab, appuyez sur « Ouvrir le terminal » et tapez docker ps -a. Le worker affiche Exited (1). docker logs worker dit pourquoi : son fichier de réglages, /settings/worker.conf, n’a pas de ligne QUEUE_HOST. Ajoutez-y QUEUE_HOST=cache depuis un shell dans web (docker exec -it web sh), lancez docker restart worker, et docker ps le montre Up et healthy. Le lien Docker basics page, sous « Dans votre navigateur », affiche la page servie par web.
Que demander aux élèves de rendre
La sortie de docker ps -a avant la correction et après, la ligne du journal qui leur a dit ce qui n’allait pas, et une phrase disant lesquels des fichiers qu’ils ont écrits survivraient à l’arrêt du lab, et pourquoi. La dernière montre s’ils ont compris le système de fichiers propre d’un conteneur par rapport à un volume.
Une leçon de base sur ce lab
Docker Basics est une petite leçon qui se fait dans ce lab. L’élève y liste les conteneurs avec docker ps -a, lit le journal du worker, affiche le fichier de réglages depuis l’intérieur de web, ajoute la ligne manquante, redémarre le worker et le voit en bonne santé. Il arrête ensuite puis relance le lab pour constater que la correction a été conservée dans le volume nommé.
Les comptes personnels gratuits l’ont dans le module Basics, qui se trouve sur l’« Accueil », chaque établissement peut la copier depuis le dossier Basics de la Bibliothèque, et un nouvel établissement l’a dans un module appelé Lab Basics (Sample). Elle est volontairement petite : elle montre à un enseignant ce qu’est une leçon qui se fait dans un lab, et le lab fait le reste. Copiez-la dans un module à vous pour la modifier.
Le code sur GitHub
Le fichier compose n’a pas de Dockerfile : il lance deux images publiques standard, nginx et Valkey, toutes deux figées à une version, et écrit ce que fait chaque service dans son propre entrypoint, de sorte que tout se lit dans un seul fichier. L’image nginx est sous licence BSD-2-Clause et Valkey sous BSD-3-Clause ; aucune n’est distribuée par nous. Un élève ne peut jamais créer, récupérer, construire ni supprimer un conteneur dans un lab, le lab ne le demande donc pas ; ces commandes fonctionnent sur votre propre machine.
En faire un travail
Indiquez dans la tâche ce qu’il faut rendre.
- Créer le lab. Dans votre module, ajoutez une tâche et choisissez la carte « Lab de conteneurs », puis « Dans un dépôt GitHub ». Indiquez https://github.com/mitsurutech/lab-docker-basics avec la branche main. Le fichier compose par défaut est compose.yaml. Faites d’abord un fork du dépôt si vous voulez le modifier.
- Publier et l’essayer. « Publier » fige le commit qui vous a été montré : un changement ultérieur dans le dépôt ne modifie donc pas un lab que vous avez déjà proposé. Démarrez d’abord votre propre copie.
- Le distribuer. Attribuez-le comme n’importe quelle tâche, avec une échéance si vous le souhaitez, et indiquez dans la tâche ce qu’il faut faire et ce qu’il faut rendre.
- Noter ce qui est rendu. Ouvrez la copie d’un élève et le travail rendu, notez-le et renvoyez-le avec un motif s’il demande un complément.
Questions fréquentes
- Pourquoi le worker n’est-il pas dans docker ps ?
- Il s’arrête dès son démarrage, car son réglage manque, et docker ps ne liste que ce qui tourne. docker ps -a liste aussi les conteneurs arrêtés, et docker logs worker affiche toujours ce qu’il a dit.
- Quelles commandes docker fonctionnent dans le terminal du lab ?
- docker ps, docker logs, docker exec, docker restart et quelques autres qui ne regardent que les trois conteneurs, comme docker inspect. Rien ne peut être créé, récupéré, construit ni supprimé, et docker volume et docker network sont refusés.
- Que reste-t-il après avoir arrêté puis relancé le lab ?
- Le volume nommé qui contient /settings : un worker corrigé démarre donc tout de suite en bonne santé. Les fichiers qu’un élève a écrits ailleurs dans un conteneur ont disparu.