tutorials: improve theme + use pandoc 2

This commit is contained in:
nemunaire 2018-11-16 02:38:41 +01:00
parent de21be218a
commit d25af4fdb2
65 changed files with 1281 additions and 1292 deletions

View file

@ -1,19 +1,6 @@
include ../pandoc-opts.mk
SOURCES = tutorial.md installation.md what.md first.md cleaning.md ex-flask.md volumes.md linking.md rendu.md
PANDOCOPTS = --latex-engine=xelatex \
--standalone \
--normalize \
--number-sections \
--smart \
-M lang=fr-FR \
-M fontsize=12pt \
-M papersize=a4paper \
-M mainfont="Linux Libertine O" \
-M monofont="FantasqueSansMono-Regular" \
-M sansfont="Linux Biolinum O" \
-M colorlinks=true \
-M linkcolor="black" \
-M urlcolor="[rgb]{0.2,0.6,0.4}" \
--include-in-header=../header.tex
all: tutorial.pdf

View file

@ -21,10 +21,10 @@ cours d'exécution, arrêtés, ...) avec la commande suivante :
<div lang="en-US">
```
42sh$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES
552d71619723 hello-world "/hello" 4 days ago Exited (0) 4 days ago dreamy_gates
0e8bbff6d500 debian "/bin/bash" 2 weeks ago Exited (0) 2 weeks ago cranky_jones
42sh$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES
552d71619723 hello-world "/hello" 4 days ago Exited (0) 4 days ago dreamy_gates
0e8bbff6d500 debian "/bin/bash" 2 weeks ago Exited (0) 2 weeks ago cranky_jones
```
</div>
@ -32,16 +32,16 @@ Il y a de fortes chances pour que vous n'ayez plus besoin de ces vieux
conteneurs. Pour les supprimer, utilisez la commande :
<div lang="en-US">
```
docker container rm 0e8bbff6d500 552d71619723
```bash
docker container rm 0e8bbff6d500 552d71619723
```
</div>
ou encore :
<div lang="en-US">
```
docker container rm cranky_jones dreamy_gates
```bash
docker container rm cranky_jones dreamy_gates
```
</div>
@ -62,6 +62,6 @@ une commande `prune` qui supprimera les objets inutilisés.
## `docker-gc`
Vous pouvez également utiliser l'image <https://github.com/spotify/docker-gc>
pour effectuer le ménage de manière automatique, plus fréquemment. Mais
attention à vos données !
Vous pouvez également utiliser l'image
[https://github.com/spotify/docker-gc](`docker-gc`) pour effectuer le ménage de
manière automatique, plus fréquemment. Mais attention à vos données !

View file

@ -12,8 +12,8 @@ page : <https://you.p0m.fr/>.
Nous pouvons télécharger et lancer le service grâce à :
<div lang="en-US">
```
docker container run -i nemunaire/youp0m
```bash
docker container run -i nemunaire/youp0m
```
</div>
@ -35,8 +35,8 @@ interférer avec son hôte.
Nous pouvons rediriger le port avec l'argument <span lang="en-US">`-p dst_host:src_cntr`</span> :
<div lang="en-US">
```
docker container run -i -p 8080:8080 nemunaire/youp0m
```bash
docker container run -i -p 8080:8080 nemunaire/youp0m
```
</div>
@ -46,19 +46,19 @@ Pour le moment, le service ne dispose d'aucune image à afficher, vous pouvez
utiliser cette syntaxe pour ajouter une image :
<div lang="en-US">
```
base64 monimage.jpg | curl --data @- http://localhost:8080/api/images/monimage
```bash
base64 monimage.jpg | curl --data @- http://localhost:8080/api/images/monimage
```
</div>
Si vous n'êtes pas particulièrement inspiré, vous pouvez ajouter ces images :
<div lang="en-US">
```
wget -O- https://you.p0m.fr/images/lynx4 | base64 | curl --data @- http://localhost:8080/api/images/lynx
wget -O- https://you.p0m.fr/images/otters | base64 | curl --data @- http://localhost:8080/api/images/otters
wget -O- https://you.p0m.fr/images/DNcrZ6u | base64 | curl --data @- http://localhost:8080/api/images/DNcrZ6u
wget -O- https://you.p0m.fr/images/raccoons | base64 | curl --data @- http://localhost:8080/api/images/raccoons
```bash
wget -O- https://you.p0m.fr/images/lynx4 | base64 | curl --data @- http://localhost:8080/api/images/lynx
wget -O- https://you.p0m.fr/images/otters | base64 | curl --data @- http://localhost:8080/api/images/otters
wget -O- https://you.p0m.fr/images/DNcrZ6u | base64 | curl --data @- http://localhost:8080/api/images/DNcrZ6u
wget -O- https://you.p0m.fr/images/raccoons | base64 | curl --data @- http://localhost:8080/api/images/raccoons
```
</div>
@ -72,8 +72,8 @@ service ne s'exécutera pas dans notre terminal !
On utilise l'option `-d` pour lancer le conteneur en tâche de fond :
<div lang="en-US">
```
docker container run -d -p 8080:8080 nemunaire/youp0m
```bash
docker container run -d -p 8080:8080 nemunaire/youp0m
```
</div>
@ -82,8 +82,8 @@ obtenir avec un `docker container ls`), nous pouvons consulter les logs du
service (en fait, les sorties standard et d'erreur) :
<div lang="en-US">
```
docker container logs 0123456789abcdef
```bash
docker container logs 0123456789abcdef
```
</div>
@ -99,8 +99,8 @@ On ne peut pas utiliser le même port sur la machine hôte, mais pour le reste,
il s'agit des mêmes options :
<div lang="en-US">
```
docker container run -d -p 8080:8081 nemunaire/youp0m
```bash
docker container run -d -p 8080:8081 nemunaire/youp0m
```
</div>
@ -117,8 +117,8 @@ Lorsque l'on souhaite stopper un conteneur lancé en tâche de fond, on utilise
son identifiant dans la commande suivante :
<div lang="en-US">
```
docker container stop 0123456789abcdef
```bash
docker container stop 0123456789abcdef
```
</div>

View file

@ -4,11 +4,11 @@ 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">
```
docker container run hello-world
```bash
docker container run hello-world
```
</div>
@ -26,8 +26,8 @@ Nous pouvons directement utiliser le client pour rechercher une image sur le
*Store*, en utilisant la commande `search` :
<div lang="en-US">
```
docker search mariadb
```bash
docker search mariadb
```
</div>
@ -35,8 +35,8 @@ Il est possible de mettre à jour les images locales ou simplement
pré-télécharger des images depuis le Store en utilisant la commande `pull` :
<div lang="en-US">
```
docker image pull ubuntu
```bash
docker image pull ubuntu
```
</div>
@ -59,8 +59,8 @@ Par exemple, pour consulter la liste des images dont nous disposons localement
nous-même), on utilise la commande `ls` sous le type d'objets `image` :
<div lang="en-US">
```
docker image ls
```bash
docker image ls
```
</div>
@ -88,8 +88,8 @@ lancer dans le conteneur ainsi que ses éventuels arguments. Essayons d'afficher
un Hello World :
<div lang="en-US">
```
docker container run ubuntu /bin/echo "Hello World"
```bash
docker container run ubuntu /bin/echo "Hello World"
```
</div>
@ -103,8 +103,8 @@ n'utilisez pas [Alpine Linux](https://www.alpine-linux.org), vous pourriez
tenter d'utiliser son gestionnaire de paquet `apk`, via :
<div lang="en-US">
```
docker container run alpine /sbin/apk stats
```bash
docker container run alpine /sbin/apk stats
```
</div>
@ -139,16 +139,16 @@ du `run`. En fait, tout comme `git(1)` et ses sous-commandes, chaque niveau de
commande peut prendre des paramètres :
<div lang="en-US">
```
docker DOCKER_PARAMS container run RUN_OPTS image IMAGE_CMD IMAGE_ARGS ...
```bash
docker DOCKER_PARAMS container run RUN_OPTS image IMAGE_CMD IMAGE_ARGS ...
```
</div>
Par exemple :
<div lang="en-US">
```
docker -H unix:///var/run/docker.sock container run -it alpine /bin/ash -c "echo foo"
```bash
docker -H unix:///var/run/docker.sock container run -it alpine /bin/ash -c "echo foo"
```
</div>
@ -167,10 +167,10 @@ sans quoi `bash` ne se lancera pas en mode interractif[^bashnointer].
<div lang="en-US">
```
42sh$ cat cmd
echo foo
42sh$ cat cmd | docker run -i busybox
foo
42sh$ cat cmd
echo foo
42sh$ cat cmd | docker run -i busybox
foo
```
</div>
@ -186,9 +186,9 @@ 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
42sh$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4c39fc049cd1 ubuntu "/bin/bash" 6 minutes ago Up 5 minutes suspicious_galileo
```
</div>

View file

@ -18,7 +18,7 @@ Avant de continuer, assurez-vous que votre machine a bien démarré sur un noyau
<div lang="en-US">
```
x86_64
x86_64
```
</div>
@ -26,7 +26,7 @@ Assurez-vous également d'avoir un noyau récent, avec la commande `uname -r` :
<div lang="en-US">
```
4.18.11-gentoo
4.18.11-gentoo
```
</div>
@ -82,8 +82,8 @@ un bac à sable dans lequel vous pourrez commencer à faire ce TP.
Vous devriez maintenant être capable de lancer la commande suivante :
<div lang="en-US">
```
docker version
```bash
docker version
```
</div>
@ -91,24 +91,24 @@ Une sortie similaire au bloc suivant devrait apparaître sur votre écran :
<div lang="en-US">
```
Client:
Version: 18.06.1-ce
API version: 1.38
Go version: go1.10.3
Git commit: e68fc7a
Built: Sun Sep 9 10:14:56 2018
OS/Arch: linux/amd64
Experimental: false
Client:
Version: 18.06.1-ce
API version: 1.38
Go version: go1.10.3
Git commit: e68fc7a
Built: Sun Sep 9 10:14:56 2018
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: 18.06.1-ce
API version: 1.38 (minimum version 1.12)
Go version: go1.10.3
Git commit: e68fc7a
Built: Sun Sep 9 10:13:21 2018
OS/Arch: linux/amd64
Experimental: true
Server:
Engine:
Version: 18.06.1-ce
API version: 1.38 (minimum version 1.12)
Go version: go1.10.3
Git commit: e68fc7a
Built: Sun Sep 9 10:13:21 2018
OS/Arch: linux/amd64
Experimental: true
```
</div>
@ -138,8 +138,8 @@ Si vous avez cette erreur : `dial unix /var/run/docker.sock: no such file or
directory.`, le deamon n'est sans doute pas lancé. Lancez-le :
<div lang="en-US">
```
sudo service docker restart
```bash
sudo service docker restart
```
</div>
@ -151,8 +151,8 @@ denied.`, ajoutez votre utilisateur au groupe `docker` et **relancez votre
session** :
<div lang="en-US">
```
sudo gpasswd -a $USER docker
```bash
sudo gpasswd -a $USER docker
```
</div>

View file

@ -43,11 +43,11 @@ leur pilote. Pour consulter la liste de réseaux utilisables, lancez :
<div lang="en-US">
```
42sh$ docker network ls
NETWORK ID NAME DRIVER SCOPE
74cedd3ff385 bridge bridge local
d5d907add6e2 host host local
16b702ed01a0 none null local
42sh$ docker network ls
NETWORK ID NAME DRIVER SCOPE
74cedd3ff385 bridge bridge local
d5d907add6e2 host host local
16b702ed01a0 none null local
```
</div>
@ -78,8 +78,8 @@ La création d'un réseau se fait tout simplement au travers des sous-commandes
relatives aux objets Docker `network` :
<div lang="en-US">
```
docker network create --driver bridge my_fic
```bash
docker network create --driver bridge my_fic
```
</div>
@ -88,8 +88,8 @@ C'est ensuite ce nom de réseau que vous passerez à l'option `--network` de vos
réseau :
<div lang="en-US">
```
docker network connect NETWORK CONTAINER
```bash
docker network connect NETWORK CONTAINER
```
</div>
@ -98,7 +98,7 @@ mutuellement se découvrir grâce à un système de résolution de nom basé sur
nom de conteneur.
## Exercice
## Exercice {-}
À vous maintenant de connecter une instance de `nemunaire/fic-admin` à sa base
de données.
@ -108,8 +108,8 @@ de données avec le nom d'utilisateur et le mot de passe par défaut. Vous les
obtiendrez en lisant l'aide :
<div lang="en-US">
```
docker container run --rm -e MYSQL_HOST="tcp(mysql_cntr_name:3306)" nemunaire/fic-admin -help
```bash
docker container run --rm -e MYSQL_HOST="tcp(mysql_cntr_name:3306)" nemunaire/fic-admin -help
```
</div>
@ -126,8 +126,8 @@ utilisant :
<div lang="en-US">
```
42sh$ docker container exec -it ficadmin_cntr_name /bin/bash
(incntnr)# ping mysql_cntr_name
42sh$ docker container exec -it ficadmin_cntr_name /bin/bash
(incntnr)# ping mysql_cntr_name
```
</div>

View file

@ -38,13 +38,13 @@ a pu voir durant ce premier cours.
### Exemple d'exécution
<div lang="en-US">
```
42sh$ ./mycloud-run.sh
http://localhost:12345/
42sh$ #docker kill db
42sh$ ./mycloud-run.sh # le script relancera une base de données,
# sans avoir perdu les données
http://localhost:12345/
```bash
42sh$ ./mycloud-run.sh
http://localhost:12345/
42sh$ #docker kill db
42sh$ ./mycloud-run.sh # le script relancera une base de données,
# sans avoir perdu les données
http://localhost:12345/
```
</div>
@ -73,8 +73,8 @@ Voici une arborescence type:
<div lang="en-US">
```
login_x-TP1/
login_x-TP1/mycloud-run.sh
login_x-TP1/
login_x-TP1/mycloud-run.sh
```
</div>
@ -110,12 +110,12 @@ Si vous recevez un rapport avec l'erreur suivante :
<div lang="en-US">
```
[FAIL] Bad signature. Here is the gnupg output:
[FAIL] Bad signature. Here is the gnupg output:
gpg: Signature made Tue Jan 01 16:42:23 2014 CET
gpg: using RSA key 842807A84573CC96
gpg: requesting key E2CCD99DD37BD32E from hkp server pool.sks-keyservers.net
gpg: Can't check signature: No public key
gpg: Signature made Tue Jan 01 16:42:23 2014 CET
gpg: using RSA key 842807A84573CC96
gpg: requesting key E2CCD99DD37BD32E from hkp server pool.sks-keyservers.net
gpg: Can't check signature: No public key
```
</div>
@ -132,7 +132,7 @@ Si vous recevez un rapport avec l'erreur suivante :
<div lang="en-US">
```
[FAIL] The username of your key is not explicit, I can't find you.
[FAIL] The username of your key is not explicit, I can't find you.
```
</div>
@ -147,7 +147,7 @@ Si vous recevez un rapport concluant ainsi :
<div lang="en-US">
```
After analyzing your e-mail, I've decided to SKIP it.
After analyzing your e-mail, I've decided to SKIP it.
```
</div>

View file

@ -1,22 +1,23 @@
---
title: Virtualisation légère -- TP n^o^ 1
subtitle: Les bases de Docker
author: Pierre-Olivier *Nemunaire* Mercier
author: Pierre-Olivier *nemunaire* [Mercier]{.smallcaps}
institute: EPITA
date: Jeudi 4 octobre 2018
abstract: |
Durant ce premier TP, nous allons apprendre à utiliser Docker !
\vspace{1em}
Le TP se termine par un petit projet à rendre à <virli@nemunai.re>
au plus tard le jeudi 18 octobre 2018 à 8 h 42, des questions de
cours sont également à compléter avant cette date sur
Epitaf. Consultez la dernière partie de ce TP pour les modalités.
En tant que personnes sensibilisées à la sécurité des échanges
électroniques, vous devrez m'envoyer vos rendus signés avec votre
clef PGP. Pensez à
[me](https://pgp.mit.edu/pks/lookup?op=vindex&search=0x842807A84573CC96)
faire signer votre clef et n'hésitez pas à [faire signer la
votre](https://www.meetup.com/fr/Paris-certification-de-cles-PGP-et-CAcert/).
...
Durant ce premier TP, nous allons apprendre à utiliser Docker !
Le TP se termine par un petit projet à rendre à <virli@nemunai.re> au plus tard
le jeudi 18 octobre 2018 à 8 h 42, des questions de cours sont également à
compléter avant cette date sur Epitaf. Consultez la dernière partie de ce TP
pour les modalités.
En tant que personnes sensibilisées à la sécurité des échanges électroniques,
vous devrez m'envoyer vos rendus signés avec votre clef PGP. Pensez à
[me](https://pgp.mit.edu/pks/lookup?op=vindex&search=0x842807A84573CC96) faire
signer votre clef et n'hésitez pas à
[faire signer la votre](https://www.meetup.com/fr/Paris-certification-de-cles-PGP-et-CAcert/).
\tableofcontents

View file

@ -28,8 +28,8 @@ le protocole HTTP, mais sans se casser la tête à installer et configurer un
serveur web :
<div lang="en-US">
```
docker container run --rm -p 80:80 -v ~/Downloads:/usr/share/nginx/html:ro -d nginx
```bash
docker container run --rm -p 80:80 -v ~/Downloads:/usr/share/nginx/html:ro -d nginx
```
</div>
@ -48,26 +48,26 @@ Comme il s'agit d'un objet, la première chose à faire va être de créer notre
volume :
<div lang="en-US">
```
docker volume create prod_youp0m
docker volume create prod_foodp0m
```bash
docker volume create prod_youp0m
docker volume create prod_foodp0m
```
</div>
Ensuite, nous pouvons démarrer un conteneur utilisant, par exemple :
<div lang="en-US">
```
docker container run --mount source=prod_youp0m,target=/srv/images nemunaire/youp0m
```bash
docker container run --mount source=prod_youp0m,target=/srv/images nemunaire/youp0m
```
</div>
On pourra également faire de même avec un conteneur MySQL :
<div lang="en-US">
```
docker container run --name mydb --mount source=prod_db,target=/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=my-secret-pw mysql
```bash
docker container run --name mydb --mount source=prod_db,target=/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=my-secret-pw mysql
```
</div>
@ -78,8 +78,8 @@ Si plus tard, vous souhaitez créer un conteneur chargé de faire des
sauvegardes, vous pourriez le lancer comme ceci :
<div lang="en-US">
```
docker container run -it --volume-from mydb busybox /bin/bash
```bash
docker container run -it --volume-from mydb busybox /bin/bash
```
</div>
@ -90,11 +90,11 @@ Lorsque vous n'avez pas besoin de stocker les données et que vous ne désirez
pas qu'elles persistent (des données sensibles par exemple) ou si cela peut
améliorer les performances de votre conteneur, il est possible de créer des
points de montages utilisant le système de fichiers `tmpfs` et donc résidant
exclusivement en RAM :
exclusivement en RAM\ :
<div lang="en-US">
```
docker container run --mount type=tmpfs,target=/srv/images nemunaire/youp0m
```bash
docker container run --mount type=tmpfs,target=/srv/images nemunaire/youp0m
```
</div>