23 questions. Une seule bonne réponse par question, et
l'explication s'affiche dès que vous avez répondu.
Le cours · La fiche
0 / 23
1Quelle commande prouve que le MOTEUR Docker répond, et pas seulement que la commande est installée ?
docker --version lit un numéro de version dans le client. docker info interroge le démon : s'il répond, le reste fonctionnera. C'est aussi lui qui donne les lignes Containers et Images que demande la question 1.1 du TP.
2Pourquoi la deuxième exécution de docker run hello-world est-elle quasi instantanée ?
La première fois, Docker annonce Unable to find image … locally et télécharge l'image. Elle reste ensuite dans le cache local. Le temps de la première exécution est presque entièrement du téléchargement : un conteneur démarre, lui, en quelques dizaines de millisecondes.
3Qu'est-ce qui distingue une image d'un conteneur ?
L'image est en lecture seule et sert de modèle ; le conteneur est une exécution de ce modèle, avec sa propre couche d'écriture. On peut créer autant de conteneurs qu'on veut à partir d'une seule image.
4Après docker pull nginx puis docker pull nginx:1.21, combien de lignes nginx affiche docker images ?
Le tag fait partie de l'identité de l'image.nginx (c'est-à-dire nginx:latest) et nginx:1.21 sont deux images distinctes, qui partagent seulement certaines couches.
5Que signifie le tag latest ?
C'est un tag comme un autre, simplement celui que Docker emploie faute de précision. Un éditeur peut publier une version neuve sans le déplacer. En production on épingle toujours une version explicite.
6Pourquoi un conteneur Alpine lancé avec docker run -it alpine sh n'apparaît-il plus dans docker ps après exit ?
Un conteneur vit tant que son processus principal vit. Ici c'était le sh : le quitter arrête le conteneur. Il n'a pas disparu pour autant — docker ps -a le montre à l'état Exited, et il occupe toujours de la place.
7Quelle commande ouvre un terminal DANS un conteneur déjà lancé ?
runcrée un nouveau conteneur ; exec entre dans un conteneur existant. Confondre les deux, c'est modifier un conteneur vierge et s'étonner que rien n'ait changé dans l'autre — l'erreur la plus coûteuse du TP, parce qu'elle ne produit aucun message.
8Un fichier modifié dans un conteneur survit-il à docker stop puis docker start ?
stop arrête le processus principal, il ne détruit pas le conteneur : sa couche d'écriture est intacte et start la retrouve. En revanche un docker rm efface cette couche — c'est ce qui motive les volumes.
9Que se passe-t-il si l'on tente docker rm sur un conteneur en cours d'exécution ?
container is running: stop the container before removing or force remove. Le refus est une protection : supprimer un conteneur actif coupe un service sans prévenir. -f envoie un SIGKILL immédiat, sans les dix secondes de grâce de stop.
10Dans -p 8080:80, que désigne 8080 ?
On lit hôte:conteneur, le dehors à gauche. 8080 est le port qu'on tape dans le navigateur ; 80 celui sur lequel nginx écoute à l'intérieur. La même règle vaut pour -v.
11Pourquoi deux conteneurs nginx peuvent-ils écouter le port 80 en même temps ?
Le port 80 d'un conteneur n'est pas le port 80 de la machine. C'est la même mécanique que le PAT : ce qui doit être unique, c'est le couple adresse/port côté hôte — d'où 8080 et 8081.
12Que signifie « Bind for 0.0.0.0:8080 failed: port is already allocated » ?
Docker a demandé au système de réserver le port 8080 sur toutes les interfaces de l'hôte, et le système a refusé. Côté conteneur, rien n'empêchait le troisième nginx d'écouter sur 80. Le conteneur est tout de même créé, à l'état Created : il faudra le supprimer.
13On supprime un conteneur qui montait un volume nommé. Que devient le volume ?
Un volume ne dépend d'aucun conteneur.docker rm n'y touche pas : il faut un docker volume rm explicite. C'est précisément ce que démontre la partie 5 du TP — et c'est aussi pourquoi on finit par en avoir des dizaines d'oubliés.
14Que fait -v donnees-web:/usr/share/nginx/html ?
Le volume est monté : tout ce qui est écrit sous ce chemin va dans le volume, pas dans la couche du conteneur. Au tout premier montage, le volume étant vide, Docker y recopie le contenu existant ; ensuite, il le masque entièrement.
$(docker ps -aq) sur une liste vide passe zéro argument à docker rm, qui répond requires at least 1 argument. prune gère ce cas, demande confirmation et annonce les octets récupérés.
16Deux conteneurs lancés sans --network : « ping c2 » depuis c1 répond quoi ?
Sur le réseau bridge par défaut, il n'y a pas de résolveur Docker : /etc/resolv.conf pointe sur celui de la machine, qui ne connaît aucun nom de conteneur. La communication par ADRESSE, elle, passe très bien — c'est uniquement le nom qui manque.
17Sur un réseau personnalisé, quelle adresse figure dans /etc/resolv.conf ?
127.0.0.11 est le résolveur interne de Docker : une adresse de bouclage DU CONTENEUR, où Docker place un petit serveur DNS qui connaît les noms des conteneurs du réseau. Ce qu'il ignore, il le renvoie au résolveur de l'hôte.
18On arrête deux conteneurs du réseau par défaut et on les redémarre dans l'ordre inverse. Leurs adresses ?
L'adresse suit l'ordre de démarrage, pas le conteneur. C'est la raison pour laquelle configurer une application avec l'adresse d'un autre conteneur produit une panne au premier redémarrage — un jour où personne n'a touché au code.
19docker run --ip 172.17.0.50 alpine, sans --network : que répond Docker ?
Message exact : user-specified IP address is supported on user-defined networks only. C'est un interdit, pas un conflit : le réseau par défaut ne gère pas les adresses imposées, quelle que soit l'adresse demandée.
20Un conteneur raccordé à deux réseaux permet-il aux autres de passer de l'un à l'autre ?
Il faut trois choses, et aucune n'est automatique : le transfert de paquets activé sur la passerelle, une route chez le client vers l'autre réseau, et une route de retour chez le serveur. Une route n'est jamais à sens unique.
21À quoi sert -p 8080:80 ?
Deux conteneurs du même réseau se joignent sans aucune option — wget http://serveur suffit. -p ne sert qu'à percer la frontière entre la machine et le réseau Docker.
22docker port affiche 0.0.0.0:8080. Qu'est-ce que cela implique ?
0.0.0.0 n'est pas 127.0.0.1 : ce qu'on croyait « en local » est visible de tout le réseau de la salle. Pour ne l'ouvrir qu'à soi-même, -p 127.0.0.1:8080:80.
23Pourquoi faut-il supprimer les conteneurs avant les réseaux ?
Docker le dit lui-même : network reseau-lan has active endpoints. Chaque conteneur raccordé y possède un point d'attache ; le supprimer sous leurs pieds laisserait des conteneurs branchés sur rien.