TP1 update

This commit is contained in:
nemunaire 2019-10-01 11:03:15 +02:00
parent f9ced0f1b5
commit c2693c0c19
12 changed files with 92 additions and 47 deletions

View file

@ -1,6 +1,6 @@
include ../pandoc-opts.mk include ../pandoc-opts.mk
SOURCES = tutorial.md installation.md what.md first.md cleaning.md ex-flask.md volumes.md linking.md rendu.md SOURCES = tutorial.md installation.md what.md first.md cleaning.md ex-flask.md volumes.md linking.md secrets.md rendu.md
all: tutorial.pdf all: tutorial.pdf

View file

@ -17,7 +17,7 @@ l'option `--rm`.
## Conteneurs ## Conteneurs
Nous pouvons afficher l'ensemble des conteneurs, quelque soit leur état (en Nous pouvons afficher l'ensemble des conteneurs, quelque soit leur état (en
cours d'exécution, arrêtés, ...) avec la commande suivante : cours d'exécution, arrêtés,\ ...) avec la commande suivante :
<div lang="en-US"> <div lang="en-US">
``` ```
@ -57,7 +57,13 @@ de la même manière que les conteneurs, avec les sous-commandes `docker image`.
## `prune` ## `prune`
Dans la plupart des menus permettant de gérer les objets Docker, vous trouverez Dans la plupart des menus permettant de gérer les objets Docker, vous trouverez
une commande `prune` qui supprimera les objets inutilisés. une commande `prune` qui supprimera les objets inutilisés :
<div lang="en-US">
```bash
docker container prune
```
</div>
## `docker-gc` ## `docker-gc`

View file

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 82 KiB

Before After
Before After

View file

@ -55,10 +55,10 @@ Si vous n'êtes pas particulièrement inspiré, vous pouvez ajouter ces images :
<div lang="en-US"> <div lang="en-US">
```bash ```bash
wget -O- https://you.p0m.fr/images/lynx4 | base64 | curl --data @- http://localhost:8080/api/images/lynx for IMG in lynx4 otters DNcrZ6u raccoons; do
wget -O- https://you.p0m.fr/images/otters | base64 | curl --data @- http://localhost:8080/api/images/otters wget -O- https://you.p0m.fr/images/$IMG | base64 | \
wget -O- https://you.p0m.fr/images/DNcrZ6u | base64 | curl --data @- http://localhost:8080/api/images/DNcrZ6u curl --data @- http://localhost:8080/api/images/$IMG
wget -O- https://you.p0m.fr/images/raccoons | base64 | curl --data @- http://localhost:8080/api/images/raccoons done
``` ```
</div> </div>
@ -96,7 +96,7 @@ absolument un clone de <https://food.p0m.fr/> !
Il s'agit du même service, mais ce n'est pas les mêmes images. Il s'agit du même service, mais ce n'est pas les mêmes images.
On ne peut pas utiliser le même port sur la machine hôte, mais pour le reste, 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 : il s'agit des mêmes options\ :
<div lang="en-US"> <div lang="en-US">
```bash ```bash
@ -107,8 +107,8 @@ docker container run -d -p 8080:8081 nemunaire/youp0m
Voyons le résultat : <http://localhost:8081> Voyons le résultat : <http://localhost:8081>
Nous avons réussi à lancer deux conteneurs à partir de la même image, et on Nous avons réussi à lancer deux conteneurs à partir de la même image, et on
voit bien que ceux-ci ne partagent pas leur système de fichiers. Notre nouvelle voit bien que ceux-ci ne partagent pas leur système de fichiers : notre
instance est encore immaculée. nouvelle instance est encore immaculée.
## Arrêt des conteneurs et persistance des données ## Arrêt des conteneurs et persistance des données

View file

@ -12,18 +12,18 @@ docker container run hello-world
``` ```
</div> </div>
Cette commande va automatiquement exécuter une série de commandes pour nous, 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 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 la récupérer sur *hello-world*. Si ce n'est pas le cas, il va aller récupérer les différentes
`store.docker.com`. Ce site met à disposition un grand nombre d'images : des couches de l'image sur le registre par défaut (celui de Docker). Il assemble
systèmes de base comme Ubuntu, Debian, Centos, etc. jusqu'à des conteneurs ensuite les images en ajoutant une couche en lecture/écriture, propre au
prêts à l'emploi : le serveur web nginx, la base de données MySQL, un serveur conteneur. Enfin, il lance la commande par défaut, telle que définie dans les
node.js, etc. métadonnées de l'image.
Nous pouvons directement utiliser le client pour rechercher une image sur le Nous pouvons directement utiliser le client pour rechercher une image sur le
*Store*, en utilisant la commande `search` : registre, en utilisant la commande `search` :
<div lang="en-US"> <div lang="en-US">
```bash ```bash
@ -31,8 +31,8 @@ docker search mariadb
``` ```
</div> </div>
Il est possible de mettre à jour les images locales ou simplement Il est possible de mettre à jour les images locales, ou télécharger les couches
pré-télécharger des images depuis le Store en utilisant la commande `pull` : d'images qui nous intéressent, en utilisant la commande `pull` :
<div lang="en-US"> <div lang="en-US">
```bash ```bash
@ -40,6 +40,9 @@ docker image pull ubuntu
``` ```
</div> </div>
### 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`, 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
@ -64,6 +67,9 @@ docker image ls
``` ```
</div> </div>
### Tag
Vous devriez constater la présence de plusieurs images « Ubuntu », mais chacune Vous devriez constater la présence de plusieurs images « Ubuntu », mais chacune
a un *TAG* différent. En effet, souvent, il existe plusieurs versions d'une même a un *TAG* différent. En effet, souvent, il existe plusieurs versions d'une même
image. Pour Ubuntu par exemple, nous avons la possibilité de lancer la version image. Pour Ubuntu par exemple, nous avons la possibilité de lancer la version
@ -81,7 +87,7 @@ lançant l'image.
## Exécuter un programme dans un conteneur ## Exécuter un programme dans un conteneur
Maintenant que nous avons à notre disposition l'image d'un conteneur Ubuntu, Maintenant que nous avons à notre disposition l'image d'un conteneur Ubuntu,
lançons-la ! nous allons pouvoir jouer avec !
La commande `run` de Docker prend comme derniers arguments le programme à La commande `run` de Docker prend comme derniers arguments le programme à
lancer dans le conteneur ainsi que ses éventuels arguments. Essayons d'afficher lancer dans le conteneur ainsi que ses éventuels arguments. Essayons d'afficher
@ -118,8 +124,8 @@ très rapide et ne consomme pas beaucoup d'espace disque.
Étant donné que chaque conteneur est créé à partir d'un modèle, cela signifie Étant donné que chaque conteneur est créé à partir d'un modèle, cela signifie
que lorsque nous exécutons une commande modifiant les fichiers d'un conteneur, que lorsque nous exécutons une commande modifiant les fichiers d'un conteneur,
cela ne modifie pas l'image de base, mais crée une nouvelle image. Que nous cela ne modifie pas l'image de base. La modification reste contenue dans la
pouvons ensuite utiliser comme image de base. couche propre au conteneur dans l'UnionFS.
![Images vs. conteneurs](img-vs-cntr.png "Images vs. conteneurs"){ width=85% } ![Images vs. conteneurs](img-vs-cntr.png "Images vs. conteneurs"){ width=85% }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 247 KiB

After

Width:  |  Height:  |  Size: 292 KiB

Before After
Before After

View file

@ -26,7 +26,7 @@ Assurez-vous également d'avoir un noyau récent, avec la commande `uname -r` :
<div lang="en-US"> <div lang="en-US">
``` ```
4.18.11-gentoo 5.2.14-gentoo
``` ```
</div> </div>
@ -41,7 +41,7 @@ a été nommé [`docker.io`](https://packages.debian.org/sid/docker.io).
Si dans un environnement de production, on préférera sans doute utiliser une Si dans un environnement de production, on préférera sans doute utiliser une
version déjà bien éprouvée, pour ce cours, nous allons avoir besoin de la 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 **dernière version disponible**. Référez-vous à la documentation officielle
correspondant à votre distribution : correspondant à votre distribution :
<https://docs.docker.com/install/linux/docker-ce/debian/> <https://docs.docker.com/install/linux/docker-ce/debian/>
@ -58,7 +58,7 @@ Debian *Jessie or newer*.
Bien que les fonctionnalités de contenerisation de Docker que nous utiliserons Bien que les fonctionnalités de contenerisation de Docker que nous utiliserons
ne soient disponibles que sous Linux, il est possible d'utiliser Docker de ne soient disponibles que sous Linux, il est possible d'utiliser Docker de
manière déportée : le daemon Docker tournera dans une VM Linux, mais vous manière déportée : le daemon Docker tournera dans une VM Linux, mais vous
pourriez interagir avec lui via votre ligne de commande habituelle. pourrez interagir avec lui via votre ligne de commande habituelle.
Téléchargez la version correspondante à votre système d'exploitation : Téléchargez la version correspondante à votre système d'exploitation :
@ -92,21 +92,21 @@ Une sortie similaire au bloc suivant devrait apparaître sur votre écran :
<div lang="en-US"> <div lang="en-US">
``` ```
Client: Client:
Version: 18.06.1-ce Version: 19.03.2
API version: 1.38 API version: 1.40
Go version: go1.10.3 Go version: go1.12.9
Git commit: e68fc7a Git commit: 6a30dfc
Built: Sun Sep 9 10:14:56 2018 Built: Mon Sep 16 15:56:27 2019
OS/Arch: linux/amd64 OS/Arch: linux/amd64
Experimental: false Experimental: false
Server: Server:
Engine: Engine:
Version: 18.06.1-ce Version: 19.03.2
API version: 1.38 (minimum version 1.12) API version: 1.40 (minimum version 1.12)
Go version: go1.10.3 Go version: go1.12.9
Git commit: e68fc7a Git commit: 6a30dfc
Built: Sun Sep 9 10:13:21 2018 Built: Mon Sep 16 15:55:09 2019
OS/Arch: linux/amd64 OS/Arch: linux/amd64
Experimental: true Experimental: true
``` ```
@ -119,8 +119,9 @@ 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 business-model de la société a évolué et ils proposent désormais deux
éditions : *Community Edition* et *Enterprise Edition*. La seconde est payante éditions : *Community Edition* et *Enterprise Edition*. La seconde est payante
et possède un certain nombre d'atouts pour faciliter son adoption en entreprise 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 (notamment pas mal d'interfaces graphiques, etc.). Le cœur de la technologie,
est quant à lui entièrement présent dans l'édition communautaire. 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 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 du mois de parution (comme on a l'habitude avec Ubuntu 16.04 par exemple). Le

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

View file

@ -98,6 +98,29 @@ mutuellement se découvrir grâce à un système de résolution de nom basé sur
nom de conteneur. nom de conteneur.
## Entrer dans un conteneur en cours d'exécution
Dans certaines circonstances, les journaux ne sont pas suffisant pour
déboguer correctement l'exécution d'un conteneur.
<div lang="en-US">
```bash
docker container run mysql
```
</div>
...
<div lang="en-US">
```bash
docker container exec -it /bin/bash
ip ...
```
</div>
Notez qu'il n'est pas possible d'`exec` dans un conteneur éteint, et que si la commande initiale du conteneur se termine, tous les `exec` seront également tués.
## Exercice {-} ## Exercice {-}
À vous maintenant de connecter une instance de `nemunaire/fic-admin` à sa base À vous maintenant de connecter une instance de `nemunaire/fic-admin` à sa base

View file

@ -0,0 +1,6 @@
\newpage
Garder des secrets
==================
TODO

View file

@ -3,14 +3,14 @@ title: Virtualisation légère -- TP n^o^ 1
subtitle: Les bases de Docker subtitle: Les bases de Docker
author: Pierre-Olivier *nemunaire* [Mercier]{.smallcaps} author: Pierre-Olivier *nemunaire* [Mercier]{.smallcaps}
institute: EPITA institute: EPITA
date: Jeudi 4 octobre 2018 date: Mercredi 2 octobre 2019
abstract: | abstract: |
Durant ce premier TP, nous allons apprendre à utiliser Docker ! Durant ce premier TP, nous allons apprendre à utiliser Docker !
\vspace{1em} \vspace{1em}
Le TP se termine par un petit projet à rendre à <virli@nemunai.re> 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 au plus tard le mercredi 16 octobre 2018 à 13 h 42, des questions de
cours sont également à compléter avant cette date sur cours sont également à compléter avant cette date sur
Epitaf. Consultez la dernière partie de ce TP pour les modalités. Epitaf. Consultez la dernière partie de ce TP pour les modalités.

View file

@ -8,13 +8,14 @@ Docker est un écosystème d'outils de haut niveau, permettant d'utiliser des
Docker est composé d'un daemon lancé au démarrage de votre machine, avec lequel Docker est composé d'un daemon lancé au démarrage de votre machine, avec lequel
vous interagissez via un client (le programme `docker`). La communication entre vous interagissez via un client (le programme `docker`). La communication entre
le daemon et le client s'effectuant sur une API REST au travers d'une le daemon et le client s'effectuant sur une API REST généralement au travers
socket. D'ailleurs, le client peut ne pas être sur la même machine qui d'une socket.
exécutera effectivement les conteneurs.
C'est ce qu'il se passe lorsqu'on utilise *Docker4Windows* ou *Docker4Mac* : Le client peut d'ailleurs ne pas être sur la même machine qui exécutera
une machine virtuelle Linux est lancée parallèlement au système de base et effectivement les conteneurs. C'est ce qu'il se passe lorsqu'on utilise
chaque commande `docker` tapée est passée au deamon dans la machine virtuelle.[^dockermachine] *Docker4Windows* ou *Docker4Mac* : une machine virtuelle Linux est lancée
parallèlement au système de base et chaque commande `docker` tapée est passée
au deamon dans la machine virtuelle.[^dockermachine]
[^dockermachine]: Il suffit de modifier la variable d'environnement [^dockermachine]: Il suffit de modifier la variable d'environnement
`DOCKER_HOST` ou de passer le paramètre `-H` suivi de l'URL de la socket à `DOCKER_HOST` ou de passer le paramètre `-H` suivi de l'URL de la socket à
@ -33,8 +34,8 @@ Une image peut, par exemple, contenir :
* un serveur web et votre application web, prêts à l'emploi, * un serveur web et votre application web, prêts à l'emploi,
* ... * ...
Les images sont utilisées comme modèle qui sera dupliqué lorsque l'on Les images sont utilisées comme **modèle** qui sera ensuite dupliqué à chaque
démarre un nouveau conteneur. fois que l'on démarrera un nouveau conteneur.
Il y a deux méthodes pour obtenir des images Docker : soit les construire avec Il y a deux méthodes pour obtenir des images Docker : soit les construire avec
les outils fournis, soit les récupérer depuis un registre. les outils fournis, soit les récupérer depuis un registre.
@ -48,6 +49,8 @@ chaque fois que vous lancez un conteneur, une couche lecture/écriture est
ajoutée au dessus de l'image. Cette couche est propre au conteneur et ajoutée au dessus de l'image. Cette couche est propre au conteneur et
temporaire : l'image n'est pas modifiée par l'exécution d'un conteneur. temporaire : l'image n'est pas modifiée par l'exécution d'un conteneur.
![Couches d'un conteneur](layers-multi-container.png "Couches d'un conteneur"){ width=70% }
Chaque conteneur s'exécute dans un environnement restreint et distinct de Chaque conteneur s'exécute dans un environnement restreint et distinct de
l'environnement principal (où vous avez votre bureau). Par exemple, dans cet l'environnement principal (où vous avez votre bureau). Par exemple, dans cet
environnement, vous ne pouvez pas voir les processus qui sont situés en dehors, environnement, vous ne pouvez pas voir les processus qui sont situés en dehors,