Chez moi, ça marchait
Une développeuse crée une petite boutique en ligne sur son portable. Tout marche. Sur le serveur de l’entreprise, l’application plante : il y a une ancienne version d’une bibliothèque.
Personne n’a commis de faute. Les deux machines étaient simplement différentes. Un conteneur emporte l’application avec tout ce dont elle a besoin. Elle tourne alors partout de la même façon.
À la fin de cette leçon
Remarque
Je peux lancer une application dans un conteneur et regarder ce qu’il y a dedans.
Mots-clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Image | un paquet en lecture seule : un programme et ce dont il a besoin | |
| Conteneur | une copie en marche d’une image, avec ses fichiers et ses processus | |
| Étiquette (tag) | la partie après les deux-points, qui nomme une version de l’image | 1.27-alpine |
| Port | une porte numérotée où un programme attend ses visiteurs | 80 |
| Volume | un dossier gardé hors du conteneur, pour qu’il survive |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
L’image est la recette, le conteneur le plat
Une image est un paquet. Elle contient un programme, ses fichiers et une note qui dit comment le démarrer. Une image ne change jamais.
Un conteneur est ce qu’on obtient en démarrant une image. On peut démarrer beaucoup de conteneurs depuis une seule image, comme on fait beaucoup de gâteaux avec une recette.
Votre labo a trois conteneurs. Lancez la commande pour les lister.
Lister tous les conteneurs
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.
Exemple travaillé : lire une ligne
| Colonne | Ce qu’elle dit | Dans votre labo |
|---|---|---|
| IMAGE | l’image dont le conteneur est parti | web utilise nginx, cache utilise valkey |
| STATUS | en marche, arrêté ou en difficulté | Up, Exited ou healthy |
| PORTS | les portes où le programme attend | 80/tcp pour web |
| NAMES | le nom à taper dans les autres commandes | web, cache, worker |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Un conteneur a sa propre vue
Dans un conteneur, le programme voit ses fichiers et sa liste de processus. Il ne voit pas les fichiers des autres conteneurs.
docker exec lance une commande dans un conteneur qui tourne. Les trois commandes suivantes regardent web, le conteneur qui sert une page web.
Lister les processus dans web
docker exec web psAffiché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.
Demander la version du serveur
docker exec web nginx -vAffiché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.
Lister le dossier des pages servies
docker exec web ls /usr/share/nginx/htmlAffiché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.
Une erreur fréquente
Attention
On croit souvent qu’un conteneur est une petite machine virtuelle. Ce n’est pas le cas. Un conteneur est un processus ordinaire de la machine hôte, qui voit ses propres fichiers. Il partage le noyau de l’hôte. Choisissez une machine virtuelle quand il faut un autre système.
De quel système viennent les fichiers de web ?
docker exec web head -n 1 /etc/os-releaseAffiché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.
Demander à web son noyau
docker exec web uname -rAffiché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.
Poser la même question à votre terminal
uname -rAffiché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.
Les ports laissent entrer, les volumes gardent
Un serveur web attend sur le port 80. Les autres conteneurs du réseau du labo l’atteignent par son nom, web.
Les fichiers propres d’un conteneur ne durent que ce que dure le conteneur. Si on le remplace, ou si on arrête le labo, ils disparaissent.
Un volume est un dossier gardé hors du conteneur. Le labo en a un dans /settings.
Visiter le port web par son nom
curl -s -o /dev/null -w "%{http_code}\n" http://webAffiché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.
Créer un fichier dans le dossier du conteneur
docker exec web touch /tmp/memo.txtAffiché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.
Le voir apparaître
docker exec web ls /tmpAffiché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.
Regarder le volume sans le changer
docker exec web ls /settingsAffiché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.
Pour aller plus loin
Comptez les lignes nginx: worker process affichées par docker exec web ps. Lancez ensuite docker exec web nproc, qui affiche le nombre de processeurs que voit le conteneur.
Comparez les deux nombres. Expliquez pourquoi nginx lance peut-être autant de workers, et à qui appartiennent ces processeurs.