TP1 done
This commit is contained in:
parent
a75f4b43b7
commit
5f4880dc50
14 changed files with 160 additions and 109 deletions
|
@ -137,10 +137,96 @@ l'installation d'un paquet) s'applique à d'autres conteneurs, il va falloir
|
|||
créer une nouvelle image à partir de ce conteneur.
|
||||
|
||||
|
||||
### Programme par défaut
|
||||
|
||||
Chaque image vient avec un certain nombre de métadonnées, notamment le
|
||||
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` :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
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` :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
docker container run hello-world /hello
|
||||
```
|
||||
</div>
|
||||
|
||||
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.
|
||||
```
|
||||
</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 :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
42sh$ docker container run alpine
|
||||
42sh$ echo $?
|
||||
0
|
||||
```
|
||||
</div>
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
42sh$ docker container run --interactive --tty alpine
|
||||
/ # _
|
||||
```
|
||||
</div>
|
||||
|
||||
En fait, comme on a vu que le programme `docker` n'est qu'un client du daemon,
|
||||
c'est toujours le daemon qui exécute directement les commandes et gère les
|
||||
entrées et sorties standards et d'erreur. Avec l'option `--interactive`, on
|
||||
s'assure que l'entrée standard ne sera pas fermée (`close(2)`). Nous demandons
|
||||
également l'allocation d'un TTY, sans quoi `bash` ne se lancera pas en mode
|
||||
interractif[^bashnointer].
|
||||
|
||||
[^bashnointer]: Mais il sera possible de l'utiliser sans allouer de TTY, comme
|
||||
dans cet exemple :
|
||||
|
||||
<div lang="en-US">
|
||||
```
|
||||
42sh$ cat cmd
|
||||
echo foo
|
||||
42sh$ cat cmd | docker run -i busybox
|
||||
foo
|
||||
```
|
||||
</div>
|
||||
|
||||
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` :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
42sh$ docker container run -it alpine
|
||||
/ # _
|
||||
```
|
||||
</div>
|
||||
|
||||
|
||||
### Les paramètres
|
||||
|
||||
Vous avez remarqué l'utilisation des options `--tty` et `--interactive` ? Avant
|
||||
le nom de l'image, elles sont gérées par Docker pour modifier le comportement
|
||||
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 :
|
||||
|
||||
|
@ -164,30 +250,11 @@ l'emplacement du point de communication avec le daemon), tandis que les options
|
|||
simplement transmis au conteneur comme argument au premier `execve(2)` du
|
||||
conteneur.
|
||||
|
||||
Avec l'option `--interactive`, on s'assure que l'entrée standard ne sera pas
|
||||
fermée (`close(2)`). Nous demandons également l'allocation d'un TTY,
|
||||
sans quoi `bash` ne se lancera pas en mode interractif[^bashnointer].
|
||||
|
||||
[^bashnointer]: Mais il sera possible de l'utiliser sans allouer de TTY, comme
|
||||
par exemple en faisant :
|
||||
|
||||
<div lang="en-US">
|
||||
```
|
||||
42sh$ cat cmd
|
||||
echo foo
|
||||
42sh$ cat cmd | docker run -i busybox
|
||||
foo
|
||||
```
|
||||
</div>
|
||||
|
||||
L'option `-i` reste néanmoins nécessaire pour que l'entrée standard soit
|
||||
transmise au conteneur.
|
||||
|
||||
|
||||
## Lister les conteneurs
|
||||
|
||||
Avant de quitter notre conteneur, regardons, à l'aide d'un autre terminal,
|
||||
l'état de notre conteneur. La commande suivnate permet d'obtenir la liste des
|
||||
l'état de notre conteneur. La commande suivante permet d'obtenir la liste des
|
||||
conteneurs en cours d'exécution :
|
||||
|
||||
<div lang="en-US">
|
||||
|
|
|
@ -26,7 +26,7 @@ Assurez-vous également d'avoir un noyau récent, avec la commande `uname -r` :
|
|||
|
||||
<div lang="en-US">
|
||||
```
|
||||
5.2.14-gentoo
|
||||
5.8.9-gentoo
|
||||
```
|
||||
</div>
|
||||
|
||||
|
@ -44,7 +44,7 @@ version déjà bien éprouvée, pour ce cours, nous allons avoir besoin de la
|
|||
**dernière version disponible**. Référez-vous à la documentation officielle
|
||||
correspondant à votre distribution :
|
||||
|
||||
<https://docs.docker.com/install/linux/docker-ce/debian/>
|
||||
<https://docs.docker.com/engine/install/debian/>
|
||||
|
||||
**Et Kali Linux alors ?** Kali étant basée sur Debian, référez-vous à
|
||||
la procédure d'installation de cette distribution.
|
||||
|
@ -93,47 +93,36 @@ Une sortie similaire au bloc suivant devrait apparaître sur votre écran :
|
|||
<div lang="en-US">
|
||||
```
|
||||
Client:
|
||||
Version: 19.03.2
|
||||
Version: 19.03.12
|
||||
API version: 1.40
|
||||
Go version: go1.12.9
|
||||
Git commit: 6a30dfc
|
||||
Built: Mon Sep 16 15:56:27 2019
|
||||
Go version: go1.14.6
|
||||
Git commit: 48a66213fe
|
||||
Built: Thu Aug 6 01:27:59 2020
|
||||
OS/Arch: linux/amd64
|
||||
Experimental: false
|
||||
|
||||
Server:
|
||||
Engine:
|
||||
Version: 19.03.2
|
||||
Version: 19.03.12
|
||||
API version: 1.40 (minimum version 1.12)
|
||||
Go version: go1.12.9
|
||||
Git commit: 6a30dfc
|
||||
Built: Mon Sep 16 15:55:09 2019
|
||||
Go version: go1.14.6
|
||||
Git commit: 48a66213fe
|
||||
Built: Thu Aug 6 01:26:25 2020
|
||||
OS/Arch: linux/amd64
|
||||
Experimental: true
|
||||
containerd:
|
||||
Version: 1.2.13
|
||||
GitCommit: 35bd7a5f69c13e1563af8a93431411cd9ecf5021
|
||||
runc:
|
||||
Version: 1.0.0-rc10
|
||||
GitCommit:
|
||||
docker-init:
|
||||
Version: 0.18.0
|
||||
GitCommit: fec3683b971d9c3ef73f284f176672c44b448662
|
||||
```
|
||||
</div>
|
||||
|
||||
|
||||
### Versions de Docker
|
||||
|
||||
Historiquement, Docker est un projet open-source. Depuis quelques années, le
|
||||
business-model de la société a évolué et ils proposent désormais deux
|
||||
éditions : *Community Edition* et *Enterprise Edition*. La seconde est payante
|
||||
et possède un certain nombre d'atouts pour faciliter son adoption en entreprise
|
||||
(notamment pas mal d'interfaces graphiques, etc.). Le cœur de la technologie,
|
||||
qui nous intéresse princialement dans ce cours, est entièrement présent dans
|
||||
l'édition communautaire, sans limitation.
|
||||
|
||||
Depuis mars 2017, les numéros de version de Docker sont tirés de l'année et
|
||||
du mois de parution (comme on a l'habitude avec Ubuntu 16.04 par exemple). Le
|
||||
rythme actuel de parution est d'une version par trimestre (mars, juin,
|
||||
septembre, décembre).[^versions]
|
||||
|
||||
[^versions]: Tous les détails sur les versions (CE/EE et numérotation,
|
||||
fréquences, ...) sont résumés dans cette annonce :
|
||||
<https://blog.docker.com/2017/03/docker-enterprise-edition/>
|
||||
|
||||
|
||||
### `no such file or directory`?
|
||||
|
||||
Si vous avez cette erreur : `dial unix /var/run/docker.sock: no such file or
|
||||
|
|
|
@ -105,8 +105,8 @@ de données.
|
|||
|
||||
Ne vous embêtez pas avec les mots de passes des services, initialisez la base
|
||||
de données avec le nom d'utilisateur et le mot de passe par défaut. Vous les
|
||||
obtiendrez en lisant l'aide (et la [documentation de l'image
|
||||
MySQL](https://hub.docker.com/_/mysql/)) :
|
||||
obtiendrez en lisant l'aide et la [documentation de l'image
|
||||
MySQL](https://hub.docker.com/_/mysql/) :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
|
|
|
@ -36,6 +36,11 @@ docker container run --rm -p 80:80 -v ~/Downloads:/usr/share/nginx/html:ro -d ng
|
|||
Une fois cette commande lancée, votre voisin pourra accéder à votre dossier
|
||||
Downloads en renseignant l'IP de votre machine dans son navigateur favori !
|
||||
|
||||
Par défaut, `nginx` ne va pas permettre de lister le contenu du répertoire (et
|
||||
va afficher une page 404, car il cherche un fichier `index.html` dans votre
|
||||
répertoire). Vous pouvez par contre accéder à un fichier directement, par
|
||||
exemple : <http://10.42.12.23/dQw4w9WgXcQ.mp4>
|
||||
|
||||
|
||||
## Les volumes
|
||||
|
||||
|
@ -58,7 +63,7 @@ Ensuite, nous pouvons démarrer un conteneur utilisant, par exemple :
|
|||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
docker container run --mount source=prod_youp0m,target=/srv/images nemunaire/youp0m
|
||||
docker container run --mount source=prod_youp0m,target=/images nemunaire/youp0m
|
||||
```
|
||||
</div>
|
||||
|
||||
|
@ -85,7 +90,7 @@ exclusivement en RAM\ :
|
|||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
docker container run --mount type=tmpfs,target=/srv/images nemunaire/youp0m
|
||||
docker container run --mount type=tmpfs,target=/images nemunaire/youp0m
|
||||
```
|
||||
</div>
|
||||
|
||||
|
@ -105,8 +110,8 @@ même volume :
|
|||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
docker container run -d --mount source=prod_youp0m,target=/srv/images -p 8080:8080 nemunaire/youp0m
|
||||
docker container run -d --mount source=prod_youp0m,target=/srv/images -p 8081:8080 nemunaire/youp0m
|
||||
docker container run -d --mount source=prod_youp0m,target=/images -p 8080:8080 nemunaire/youp0m
|
||||
docker container run -d --mount source=prod_youp0m,target=/images -p 8081:8080 nemunaire/youp0m
|
||||
```
|
||||
</div>
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue