TP1: Add images

This commit is contained in:
nemunaire 2022-09-15 16:01:04 +02:00
parent 651283b526
commit 1ca35a1d57
6 changed files with 92 additions and 7 deletions

View File

@ -0,0 +1 @@
../docker-basis/not-published-ports.png

View File

@ -0,0 +1 @@
../docker-basis/published-ports.png

View File

@ -9,8 +9,8 @@ de configuration, ... Lorsque le conteneur est en cours d'exécution, il y a
plusieurs manières de contrôler ce qu'il se passe.
docker logs
-----------
Consulter les journaux
----------------------
La première étape consiste bien souvent à regarder ce que le conteneur affiche
sur ses sorties standard et d'erreur. Lorsqu'il est lancé en monde *daemon*, il
@ -64,8 +64,8 @@ initiale du conteneur se termine, tous les `exec` seront instantanément tués.
:::::
docker top
----------
Voir les processus
------------------
Si plusieurs processus doivent s'exécuter dans un conteneur, un bon moyen de
savoir s'ils sont tous actifs est d'utiliser:
@ -79,3 +79,54 @@ docker container top cntr_name
Cela liste tous les processus rattaché au conteneur nommé: à la fois les
processus démarrés par le `run`, mais également les éventuels processus
rattachés par `exec`.
Inspecter les propriétés
------------------------
Pour aller plus loin, découvrons la commande permettant d'afficher les
propriétés internes des objets Docker.
Peut-être avez-vous encore un conteneur `youp0m` actif?
<div lang="en-US">
```bash
docker container run -d -P registry.nemunai.re/youp0m
0a1b2c3d4e5f...
docker container inspect 0a1b2c3d4e5f
[
{
"Id": "0a1b2c3d4e5f...",
"Created": "2032-06-31T18:42:23.0123456789Z",
...
```
</div>
Le retour de cette commande va afficher un long enregistrement JSON, rempli
d'informations importantes pour Docker. Nous y retrouvons par exemple
l'emplacement réel des points de montage du système de fichiers de notre
conteneur, les réseaux rejoints, les ports exposés, la commande par
défaut,... et tant d'autres choses.
Du fait que la commande retourne un objet JSON, nous pouvons facilement
réutiliser cette sortie en la passant à l'utilitaire `jq`:
<div lang="en-US">
```bash
42sh$ docker container inspect 0a1b2c3d4e5f | \
jq -r '.NetworkSettings.Ports["8080/tcp"][0].HostPort'
49153
```
</div>
Cela peut aussi être fait avec l'option `--format`, qui utilise la syntaxe des
templates du langage Go:
<div lang="en-US">
```bash
42sh$ docker container inspect 0a1b2c3d4e5f \
-f '{{ (index (index .NetworkSettings.Ports "8080/tcp") 0).HostPort }}'
49153
```
</div>

View File

@ -28,18 +28,50 @@ service soit lancé et écoute sur le port 8080. Est-ce le cas?
Non! Car le service est contenerisé! Il s'exécute dans son coin, sans
interférer avec son hôte.
![L'hôte n'arrive pas à joindre le port 8080](not-published-ports.png "L'hôte n'arrive pas à joindre le port 8080"){ width=70% }
### Redirection de ports
Nous pouvons rediriger le port avec l'argument <span lang="en-US">`-p dst_host:src_cntr`</span>:
Nous pouvons rediriger le port avec l'argument <span lang="en-US">`--publish dst_host:src_cntr`</span>:
<div lang="en-US">
```bash
docker container run -i -p 8080:8080 registry.nemunai.re/youp0m
docker container run --publish 8080:8080 registry.nemunai.re/youp0m
```
</div>
Cette fois, nous pouvons accéder au service.
Cet argument va faire effectuer à Docker une étape supplémentaire lorsqu'il
démarerra le conteneur: il va devoir mettre en place une redirection du port
de notre système local (8080) vers le port 8080 du conteneur.
![Le port 8080 est redirigé vers le conteneur](published-ports.png "Le port 8080 est redirigé vers le conteneur"){ width=70% }
::::: {.question}
#### Peut-on démarrer plusieurs conteurs utilisant le même port de notre système local? {-}
Si l'on essai de lancer deux fois la commande de notre dernier `run`, nous
obtenons l'erreur suivante:
<div lang="en-US">
```bash
42sh$ docker container run --publish 8080:8080 registry.nemunai.re/youp0m
docker: Error response from daemon: driver failed programming external connectivity on endpoint: Bind for 0.0.0.0:8080 failed: port is already allocated.
```
</div>
En effet, un port de la pile réseau de notre système ne peut être associé qu'à
un seul et unique processus. Puisqu'il a déjà été attribué à notre précédent
conteneur, il ne peut pas être à nouveau alloué.
En revanche, nous pouvons tout-à-fait lancer deux conteneurs `youp0m` sans
rediriger leur port 8080, car le conteneur ne partage pas la pile réseau de
l'hôte. Une nouvelle pile réseau est créée pour chaque conteneur.
:::::
Cette fois, nous pouvons bien accéder au service depuis notre navigateur.
Pour le moment, le service ne dispose d'aucune image à afficher, vous pouvez
utiliser cette syntaxe pour ajouter une image:

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB