```yaml
-version: '3'
+version: "3.8"
services:
influxdb:
...
@@ -35,7 +35,8 @@ Ce fichier est un condensé des options que nous passons habituellement au
Notons toutefois la présence d'une ligne `version` ; il ne s'agit pas de la
version de vos conteneurs, mais de la version du format de fichier
`docker-compose` qui sera utilisé. Sans indication de version, la version
-originale sera utilisée.
+originale sera utilisée, ne vous permettant pas d'utiliser les dernières
+fonctionnalités de Docker.
### `services`
diff --git a/tutorial/docker-advanced/manual.md b/tutorial/docker-advanced/manual.md
index ef25f32..2f6531e 100644
--- a/tutorial/docker-advanced/manual.md
+++ b/tutorial/docker-advanced/manual.md
@@ -15,7 +15,7 @@ Le premier conteneur qui doit être lancé est la base de données orientée sé
temporelles :
[InfluxDB](https://www.influxdata.com/time-series-platform/influxdb/).
En effet, tous les autres conteneurs ont besoin de cette base de données pour
-fonctionner correctement : il serait impossible à *Chronograf* d'afficher les
+fonctionner correctement\ : il serait impossible à *Chronograf* d'afficher les
données sans base de données, tout comme *Telegraf* ne pourrait écrire les
métriques dans une base de données à l'arrêt.
@@ -48,8 +48,8 @@ le client fourni :
```
42sh$ docker container run --rm -it --link mytsdb:influxdb --entrypoint "/usr/bin/influx" \
influxdb -host influxdb
-Connected to http://influxdb:8086 version 1.6.3
-InfluxDB shell version: 1.6.3
+Connected to http://influxdb:8086 version 1.8.2
+InfluxDB shell version: 1.8.2
> show databases
name: databases
name
@@ -85,7 +85,7 @@ système. Pour cela, on commence par télécharger *Telegraf* :
```bash
-curl https://dl.influxdata.com/telegraf/releases/telegraf-1.8.1-static_linux_amd64.tar.gz | \
+curl https://dl.influxdata.com/telegraf/releases/telegraf-1.15.3_linux_amd64.tar.gz | \
tar xzv -C /tmp
```
```bash
cd /tmp/telegraf
-./telegraf --config telegraf.conf
+./usr/bin/telegraf --config etc/telegraf/telegraf.conf
```
@@ -110,7 +110,7 @@ Et observons ensuite :
```bash
42sh$ docker container run --rm -it --link mytsdb:influxdb --entrypoint "/usr/bin/influx" \
influxdb -host influxdb
-InfluxDB shell version: 1.6.3
+InfluxDB shell version: 1.8.2
> show databases
name: databases
name
diff --git a/tutorial/docker-advanced/rendu.md b/tutorial/docker-advanced/rendu.md
index 80b7323..da25c27 100644
--- a/tutorial/docker-advanced/rendu.md
+++ b/tutorial/docker-advanced/rendu.md
@@ -42,7 +42,7 @@ envoyé à une autre adresse et/ou non signé et/ou reçu après la correction n
sera pas pris en compte.
Par ailleurs, n'oubliez pas de répondre à
-[l'évaluation du cours](https://www.epitaf.fr/moodle/mod/quiz/view.php?id=213).
+[l'évaluation du cours](https://virli.nemunai.re/quiz/3).
Tarball
diff --git a/tutorial/docker-advanced/setup.md b/tutorial/docker-advanced/setup.md
index 3390cce..64ace49 100644
--- a/tutorial/docker-advanced/setup.md
+++ b/tutorial/docker-advanced/setup.md
@@ -33,7 +33,7 @@ tous les scripts. Nous pouvons l'installer en suivant la procédure suivante :
```bash
-curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-Linux-x86_64 \
+curl -L https://github.com/docker/compose/releases/download/1.27.2/docker-compose-Linux-x86_64 \
> /usr/bin/docker-compose
chmod +x /usr/bin/docker-compose
```
@@ -54,7 +54,7 @@ Comme avec Docker, nous pouvons vérifier le bon fonctionnement de
```
42sh$ docker-compose --version
-docker-compose version: 1.24.1
+docker-compose version: 1.27.2
```
diff --git a/tutorial/docker-basis/first.md b/tutorial/docker-basis/first.md
index 7ec8472..68104d4 100644
--- a/tutorial/docker-basis/first.md
+++ b/tutorial/docker-basis/first.md
@@ -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` :
+
+
+```bash
+docker container run hello-world
+```
+
+
+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` :
+
+
+```bash
+docker container run hello-world /hello
+```
+
+
+L'image ne contenant que ce programme, vous ne pourrez pas y lancer de shell :
+
+
+```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.
+```
+
+
+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 :
+
+
+```bash
+42sh$ docker container run alpine
+42sh$ echo $?
+0
+```
+
+
+
+```bash
+42sh$ docker container run --interactive --tty alpine
+/ # _
+```
+
+
+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 :
+
+
+ ```
+ 42sh$ cat cmd
+ echo foo
+ 42sh$ cat cmd | docker run -i busybox
+ foo
+ ```
+
+
+ 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` :
+
+
+```bash
+42sh$ docker container run -it alpine
+/ # _
+```
+
+
+
### 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 :
-
-
- ```
- 42sh$ cat cmd
- echo foo
- 42sh$ cat cmd | docker run -i busybox
- foo
- ```
-
-
- 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 :
diff --git a/tutorial/docker-basis/installation.md b/tutorial/docker-basis/installation.md
index 6f68497..7b0b8ec 100644
--- a/tutorial/docker-basis/installation.md
+++ b/tutorial/docker-basis/installation.md
@@ -26,7 +26,7 @@ Assurez-vous également d'avoir un noyau récent, avec la commande `uname -r` :
```
-5.2.14-gentoo
+5.8.9-gentoo
```
@@ -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 :
-
+
**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 :
```
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
```
-### 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 :
-
-
-
### `no such file or directory`?
Si vous avez cette erreur : `dial unix /var/run/docker.sock: no such file or
diff --git a/tutorial/docker-basis/linking.md b/tutorial/docker-basis/linking.md
index 6fe8db8..0e8e69f 100644
--- a/tutorial/docker-basis/linking.md
+++ b/tutorial/docker-basis/linking.md
@@ -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/) :
```bash
diff --git a/tutorial/docker-basis/volumes.md b/tutorial/docker-basis/volumes.md
index 5237edc..b0da174 100644
--- a/tutorial/docker-basis/volumes.md
+++ b/tutorial/docker-basis/volumes.md
@@ -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 :
+
## Les volumes
@@ -58,7 +63,7 @@ Ensuite, nous pouvons démarrer un conteneur utilisant, par exemple :
```bash
-docker container run --mount source=prod_youp0m,target=/srv/images nemunaire/youp0m
+docker container run --mount source=prod_youp0m,target=/images nemunaire/youp0m
```
@@ -85,7 +90,7 @@ exclusivement en RAM\ :
```bash
-docker container run --mount type=tmpfs,target=/srv/images nemunaire/youp0m
+docker container run --mount type=tmpfs,target=/images nemunaire/youp0m
```
@@ -105,8 +110,8 @@ même volume :
```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
```