diff --git a/content/06_docker_basics.md b/content/06_docker_basics.md index b3d5af3c539c43bc0538cd0760dd7a1e14eeda23..7539640caf1c2ba741e9d27e0d67feacabd5fc6e 100644 --- a/content/06_docker_basics.md +++ b/content/06_docker_basics.md @@ -75,3 +75,107 @@ quels sont leurs noms et IDs ? - Sur quelle machine se trouvent les images `docker` ? - Les images se trouvent sur le serveur exécutant le daemon `docker`, en l'occurrence c'est la VM de l'école. + +## Exercice 2 + +Exécutez le container `hepia/docker_ex03` avec un shell (`sh`) intéractif et +créez ensuite le fichier `fantasio` dans le répertoire `/ex03/` avec la commande +`touch`. + +```bash +docker run -it --rm hepia/docker_ex03 /bin/sh +``` + +```bash +cd ex03 +``` + +```bash +touch fantasio +``` + +- Que se passe-t-il quand vous quittez le shell avec `Ctrl-d` ? + - Le container est arrêté mais n'est pas supprimé (en l'occurrence il le + sera je l'exécute avec l'option `--rm`). + +Exécutez un nouveau container basé sur la même image que précédemment et nommez-la +`zorglub`. + +```bash +docker run -it --name zorglub hepia/docker_ex03 /bin/sh +``` + +- Est-ce que le fichier `/ex03/fantasio` existe ou pas ? Pourquoi ? + - Non, le fichier en question n'existera pas dans ce nouveau container + car le container `zorglub` n'est qu'une instance de l'image `hepia/docker_ex03`. + Ce container n'a rien en commun avec le container précédent à part l'image + **_parent_** qu'ils ont en commun. + +Dans le container `zorglub`, créez le fichier `/ex03/fantasio`, puis pressez la +combinaison de touches `Ctrl-p` `Ctrl-q`. + +- Quel est l'état (stoppé, en exécution, etc...) du container `zorglub` ? + - À l'aide de cette combinaison de touches, nous avons simplement détaché + le terminal intéractif du container. Par conséquent, le container est toujours + en cours d'exécution. + + - Le rôle de cette combinaison est de se détacher du shell intéractif du + container sans pour autant terminé son exécution. + +Attachez-vous (`docker attach`) alors au container `zorglub` ? + +```bash +docker attach zorglub +``` + +- Est-ce que le fichier `/ex03/fantasio` existe encore ? + - Oui, le fichier est présent. + +Dans un nouveau terminal, attachez-vous à nouveau au container `zorglub`. Placez +à côte à côte les deux terminaux dans lesquels vous êtes attaché au container +`zorglub` et tapez des caractères au clavier. + +- Qu'observez-vous et que pouvez-vous donc en déduire ? + - Nous pouvons donc en déduire que nous pouvons attacher un nombre arbitraire + de terminaux à un container cependant celui-ci ne sera dupliqué donc cela + revient à avoir une multitude de vues d'un seul _processus_. + +{width=60%} + +Exécutez la commande `docker exec -it zorglub sh` + +- Est-ce que le fichier `/ex03/fantasio` existe toujours ? Combien de shells +sont en cours d'exécution (aide : `ps`) ? + - Oui, le fichier existe toujours. En exécutant la commande `ps -ef`, on + s'aperçoit que deux shells sont en cours d'exécution (`/bin/sh` et `sh`). + +- Quelle est la différence entre les commandes `attach` et `exec` ? + - La différence entre ces deux commandes sont les suivantes : + - `attach` permet de se "réattacher" au processus qui a été lancé + au démarrage du container + - `exec` permet de lancer un nouveau processus dans un container démarré + (ex.: lancer un nouveau shell afin d'inspécter son système de fichiers). + +Terminez le shell (p.ex. avec `Ctrl-d`) dans lequel vous aviez exécuté `docker exec ...` +auparavant. + +- Est-ce que le container `zorglub` est toujours en cours d'exécution ? + - Oui, il l'est toujours. + +Exécutez un nouveau shell avec la commande `docker exec -it zorglub sh`, +puis allez dans le terminal où vous aviez réalisé le `docker attach` plus haut. +Terminez alors ce shell avec `Ctrl-d`. + +- Est-ce que le container `zorglub` est toujours en cours d'exécution ? Que +pouvez-vous en conclure ? + - En ayant fait cette manipulation, on s'aperçoit que nous avons non seulement + arrêté le processus lancé par `docker exec ...`, nous avons aussi complètement + arrêté le container ainsi que tous les vues que nous possédions vers celui-ci. + La conclusion est (comme je l'ai mentionné précédemment) que la commande + `docker attach` permet de nous "attacher" au processus original du container + et par conséquent, si on le quitte, cela va arrêter le container. + +Démarrez le container `zorglub` avec la commande `start -ia` (_attach_ + _interactive_). + +- Le fichier `/ex03/fantasio` existe-t-il toujours ? + - Oui, le fichier existe toujours. diff --git a/figs/docker_two_terminals.png b/figs/docker_two_terminals.png new file mode 100644 index 0000000000000000000000000000000000000000..b52ed453f44d3fa813d17f9b7f35ffbb21da99b4 Binary files /dev/null and b/figs/docker_two_terminals.png differ