Save tuto corrections

This commit is contained in:
nemunaire 2022-02-24 20:43:43 +01:00
commit 10448a6c8d
115 changed files with 1423 additions and 1289 deletions

View file

@ -4,7 +4,7 @@ Mon premier conteneur
---------------------
Afin de tester la bonne marche de notre installation, lançons notre premier
conteneur avec la commande\ :
conteneur avec la commande:
<div lang="en-US">
```bash
@ -13,7 +13,7 @@ docker container run hello-world
</div>
Cette commande va automatiquement exécuter une série d'actions pour nous,
comme indiqué dans le message affiché en retour :
comme indiqué dans le message affiché en retour:
D'abord, le daemon va rechercher s'il possède localement l'image
*hello-world*. Si ce n'est pas le cas, il va aller récupérer les différentes
@ -23,7 +23,7 @@ conteneur. Enfin, il lance la commande par défaut, telle que définie dans les
métadonnées de l'image.
Nous pouvons directement utiliser le client pour rechercher une image sur le
registre, en utilisant la commande `search` :
registre, en utilisant la commande `search`:
<div lang="en-US">
```bash
@ -32,7 +32,7 @@ docker search mariadb
</div>
Il est possible de mettre à jour les images locales, ou télécharger les couches
d'images qui nous intéressent, en utilisant la commande `pull` :
d'images qui nous intéressent, en utilisant la commande `pull`:
<div lang="en-US">
```bash
@ -41,40 +41,42 @@ docker image pull ubuntu
</div>
#### Attention {-}
::::: {.warning}
Les registres publics tels quel le Docker Hub mettent à disposition des images
officielles, mais aussi des images créés par la communauté. Chaque utilisateur
est libre d'envoyer une image qu'il a lui-même créée : soit car l'éditeur ne
officielles, mais aussi des images créées par la communauté. Chaque utilisateur
est libre d'envoyer une image qu'il a lui-même créé: soit car l'éditeur ne
proposait pas d'image et que quelqu'un s'est dévoué pour la faire, soit parce
qu'il avait des besoins plus spécifiques qui n'étaient pas couvert par l'image
originale. Il est important de garder en tête que vous téléchargez des
exécutables, et bien qu'ils s'exécutent dans un environnement isolé, ils
peuvent contenir du code malveillant. **De la même manière que vous devez être
attentif aux binaires que vous exécutez sur votre machine et au contexte de
leurs téléchargements, ici assurez-vous d'avoir confiance dans la personne
affiliée à l'image.**
peuvent contenir du code malveillant.
**De la même manière que vous devez être attentif aux binaires que vous
exécutez sur votre machine et au contexte de leurs téléchargements, ici
assurez-vous d'avoir confiance dans la personne affiliée à l'image.**
:::::
### Arguments de la ligne de commande
Remarquez comment on interagit avec chaque *objet Docker* : dans la ligne de
Remarquez comment on interagit avec chaque *objet Docker*: dans la ligne de
commande, le premier mot clef est le type d'objet (`container`, `image`,
`service`, `network`, `volume`, ...) ; ensuite, vient l'action que l'on
`service`, `network`, `volume`, ...) ; ensuite, vient l'action que l'on
souhaite faire dans ce cadre.[^oldcall]
[^oldcall]: cela n'a pas toujours été aussi simple, cette syntaxe n'existe que
depuis la version 1.13 (janvier 2017). C'est pourquoi, lorsque vous ferez
des recherches sur internet, vous trouverez de nombreux articles utilisant
l'ancienne syntaxe, sans le type d'objets : `docker images` au lieu de
`docker image ls`, `docker run` au lieu de `docker container run`, ...
l'ancienne syntaxe, sans le type d'objets: `docker images` au lieu de
`docker image ls`, `docker run` au lieu de `docker container run`, ...
L'ancienne syntaxe est dépréciée, mais il reste actuellement possible de
l'utiliser.
Par exemple, pour consulter la liste des images dont nous disposons localement
(soit parce qu'on les a téléchargées, soit parce que nous les avons créées
nous-même), on utilise la commande `ls` sous le type d'objets `image` :
nous-même), on utilise la commande `ls` sous le type d'objets `image`:
<div lang="en-US">
```bash
@ -85,24 +87,26 @@ docker image ls
### *Image ID*, nom, tag
Chaque image est identifiable par son *Image ID* : il s'agit d'un long
Chaque image est identifiable par son *Image ID*: il s'agit d'un long
identifiant unique. Chaque modification qui est apportée à l'image
générera un *Image ID* différent. Un peu comme un identifiant de
commit dans Git.
Pour s'y retrouver, on utilise habituellement les noms des images :
Pour s'y retrouver, on utilise habituellement les noms des images:
`hello-world` est ainsi le nom de l'image
`1b26826f602946860c279fce658f31050cff2c596583af237d971f4629b57792`.
Lorsque, comme dans le cas d'Ubuntu, il y a plusieurs *versions*
disponibles, il est possible de préciser la version au moyen d'un
*tag*. En consultant [la
documentation](https://hub.docker.com/_/ubuntu) qui accompagne chaque
conteneur, nous pouvons constater la présence de plusieurs versions
d'Ubuntu : `trusty`, `xenial`, `focal` ou `bionic`.
Lorsque, comme dans le cas d'Ubuntu, il y a plusieurs *versions* disponibles,
il est possible de préciser la version au moyen d'un *tag*. En consultant la
documentation[^hubDocUbuntu] qui accompagne chaque conteneur, nous pouvons
constater la présence de plusieurs versions d'Ubuntu: `trusty`, `xenial`,
`focal` ou `bionic`.
[^hubDocUbuntu]: Pour voir la documentation des images d'Ubuntu, consultez
<https://hub.docker.com/_/ubuntu>
Par convention, lorsque l'on souhaite désigner un tag en particulier,
on utilise la syntaxe suivante :
on utilise la syntaxe suivante:
<div lang="en-US">
```
@ -110,7 +114,7 @@ ubuntu:focal
```
</div>
Par exemple, pour lancer un conteneur Ubuntu Focal, on utilisera :
Par exemple, pour lancer un conteneur Ubuntu Focal, on utilisera:
<div lang="en-US">
```
@ -119,7 +123,7 @@ docker container run ubuntu:focal
</div>
Chaque nom d'image possède au moins un tag associé par défaut : *latest*. C'est
Chaque nom d'image possède au moins un tag associé par défaut: *latest*. C'est
le tag qui est automatiquement recherché lorsque l'on ne le précise pas en
lançant l'image.
@ -127,11 +131,11 @@ lançant l'image.
### Exécuter un programme dans un conteneur
Maintenant que nous avons à notre disposition l'image d'un conteneur Ubuntu,
nous allons pouvoir jouer avec !
nous allons pouvoir jouer avec!
La commande `run` de Docker prend comme derniers arguments le programme à
lancer dans le conteneur ainsi que ses éventuels arguments. Essayons d'afficher
un Hello World :
un Hello World:
<div lang="en-US">
```bash
@ -146,7 +150,7 @@ transféré dans le conteneur.
Pour nous en convaincre, nous pouvons tenter d'exécuter un programme qui n'est
pas présent sur notre machine, mais bien uniquement dans le conteneur. Si vous
n'utilisez pas [Alpine Linux](https://www.alpinelinux.org), vous pourriez
tenter d'utiliser son gestionnaire de paquet `apk`, via :
tenter d'utiliser son gestionnaire de paquet `apk`, via:
<div lang="en-US">
```bash
@ -184,7 +188,7 @@ programme à exécuter par défaut si l'on ne le précise pas dans la ligne de
commande.
C'est grâce à cela que vous n'avez pas eu besoin de préciser de programme
lorsque vous avez lancé l'image `hello-world` :
lorsque vous avez lancé l'image `hello-world`:
<div lang="en-US">
```bash
@ -193,7 +197,7 @@ docker container run hello-world
</div>
Il est commun que le programme le plus attendu/approprié soit lancé par défaut,
il est donc tout naturel que pour l'image `hello-world`, ce soit `/hello` :
il est donc tout naturel que pour l'image `hello-world`, ce soit `/hello`:
<div lang="en-US">
```bash
@ -201,20 +205,21 @@ docker container run hello-world /hello
```
</div>
L'image ne contenant que ce programme, vous ne pourrez pas y lancer de shell :
L'image ne contenant que ce programme, vous ne pourrez pas y lancer de shell:
<div lang="en-US">
```bash
```
42sh$ docker container run hello-world /bin/sh
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349:
starting container process caused "exec: \"/bin/sh\": stat /bin/sh: no such file or directory": unknown.
docker: Error response from daemon: OCI runtime create failed:
container_linux.go:349: starting container process caused
"exec: \"/bin/sh\": stat /bin/sh: no such file or directory"
```
</div>
Pour les images `alpine` et `ubuntu`, le programme par défaut est un shell
(`/bin/ash` pour `alpine` et `/bin/bash` pour `ubuntu`), mais il y a une
subtilité : il faut ajouter les options `--interactive` et `--tty` pour ne pas
que `docker` nous rende la main tout de suite :
subtilité: il faut ajouter les options `--interactive` et `--tty` pour ne pas
que `docker` nous rende la main tout de suite:
<div lang="en-US">
```bash
@ -239,7 +244,7 @@ s'assure que l'entrée standard ne sera pas fermée (`close(2)`). Nous demandons
interractif[^bashnointer].
[^bashnointer]: Mais il sera possible de l'utiliser sans allouer de TTY, comme
dans cet exemple :
dans cet exemple:
<div lang="en-US">
```
@ -253,7 +258,7 @@ interractif[^bashnointer].
L'option `-i` reste néanmoins nécessaire pour que l'entrée standard soit
transmise au conteneur.
Rassurez-vous, on peut les abbréger en `-i` et `-t` :
Rassurez-vous, on peut les abréger en `-i` et `-t`:
<div lang="en-US">
```bash
@ -265,22 +270,22 @@ Rassurez-vous, on peut les abbréger en `-i` et `-t` :
### Les paramètres
Vous avez remarqué le placement des options `--tty` et `--interactive` ? Avant
Vous avez remarqué le placement des options `--tty` et `--interactive`? Avant
le nom de l'image, elles sont utilisées par Docker pour modifier le comportement
du `run`. En fait, tout comme `git(1)` et ses sous-commandes, chaque niveau de
commande peut prendre des paramètres :
commande peut prendre des paramètres:
<div lang="en-US">
```bash
docker DOCKER_PARAMS container run RUN_OPTS image IMAGE_CMD IMAGE_ARGS ...
docker DOCKER_PARAMS container run RUN_OPTS image IMAGE_CMD IMAGE_ARGS …
```
</div>
Par exemple :
Par exemple:
<div lang="en-US">
```bash
docker -H unix:///var/run/docker.sock container run -it alpine /bin/ash -c "echo foo"
docker -H unix:///run/docker.sock container run -it alpine /bin/ash -c "echo foo"
```
</div>
@ -295,13 +300,13 @@ conteneur.
Avant de quitter notre conteneur, regardons, à l'aide d'un autre terminal,
l'état de notre conteneur. La commande suivante permet d'obtenir la liste des
conteneurs en cours d'exécution :
conteneurs en cours d'exécution:
<div lang="en-US">
```
42sh$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4c39fc049cd1 ubuntu "/bin/bash" 6 minutes ago Up 5 minutes suspicious_galileo
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4c39fc049cd1 ubuntu "/bin/bash" 6 minutes ago Up 5 minutes bold_gates
```
</div>