TP1 ready
This commit is contained in:
parent
9281f01857
commit
f909d463ca
16 changed files with 265 additions and 122 deletions
|
@ -3,12 +3,11 @@
|
||||||
Composition de conteneurs
|
Composition de conteneurs
|
||||||
=========================
|
=========================
|
||||||
|
|
||||||
## Automatiser la construction et le lancement
|
## Automatiser le lancement de conteneurs
|
||||||
|
|
||||||
Au lieu de faire un script pour construire et lancer tous vos conteneurs, nous
|
Au lieu de faire un script pour construire et lancer tous vos conteneurs, nous
|
||||||
allons définir à la racine de notre projet un fichier `docker-compose.yml` qui
|
allons définir à la racine de notre projet un fichier `docker-compose.yml` qui
|
||||||
contiendra les paramètres d'exécution (et éventuellement les méthodes de
|
contiendra les paramètres d'exécution.
|
||||||
construction).
|
|
||||||
|
|
||||||
<div lang="en-US">
|
<div lang="en-US">
|
||||||
```yaml
|
```yaml
|
||||||
|
@ -137,12 +136,8 @@ Consultez
|
||||||
[la documentation](https://docs.docker.com/compose/compose-file/) pour
|
[la documentation](https://docs.docker.com/compose/compose-file/) pour
|
||||||
une liste exhaustive des options que nous pouvons utiliser.
|
une liste exhaustive des options que nous pouvons utiliser.
|
||||||
|
|
||||||
Une fois que votre `docker-compose.yml` est prêt, lancez tout d'abord
|
Une fois que notre `docker-compose.yml` est prêt, nous pouvons lancer
|
||||||
`docker-compose build` pour commencer la phase de build de tous les conteneurs
|
la commande suivante et admirer le résultat :
|
||||||
listés dans le fichier.
|
|
||||||
|
|
||||||
Une fois le build terminé, nous pouvons lancer la commande suivante et admirer
|
|
||||||
le résultat :
|
|
||||||
|
|
||||||
<div lang="en-US">
|
<div lang="en-US">
|
||||||
```bash
|
```bash
|
||||||
|
|
|
@ -6,7 +6,7 @@ Lier des conteneurs
|
||||||
Avant de voir des méthodes plus automatiques pour déployer toute notre pile
|
Avant de voir des méthodes plus automatiques pour déployer toute notre pile
|
||||||
logicielle TICK, nous allons commencer par mettre en place et lier les
|
logicielle TICK, nous allons commencer par mettre en place et lier les
|
||||||
conteneurs manuellement, de la même manière que nous avons pu le faire avec
|
conteneurs manuellement, de la même manière que nous avons pu le faire avec
|
||||||
Owncloud et MySQL.
|
l'interface d'administration du FIC et MySQL.
|
||||||
|
|
||||||
|
|
||||||
## Conteneur central : la base de données
|
## Conteneur central : la base de données
|
||||||
|
@ -14,7 +14,7 @@ Owncloud et MySQL.
|
||||||
Le premier conteneur qui doit être lancé est la base de données orientée séries
|
Le premier conteneur qui doit être lancé est la base de données orientée séries
|
||||||
temporelles :
|
temporelles :
|
||||||
[InfluxDB](https://www.influxdata.com/time-series-platform/influxdb/).
|
[InfluxDB](https://www.influxdata.com/time-series-platform/influxdb/).
|
||||||
En effet, tous les autres conteneurs on besoin de cette base de données pour
|
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
|
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.
|
métriques dans une base de données à l'arrêt.
|
||||||
|
@ -46,8 +46,8 @@ le client fourni :
|
||||||
|
|
||||||
<div lang="en-US">
|
<div lang="en-US">
|
||||||
```
|
```
|
||||||
42sh$ docker container run --rm -it --link mytsdb:influxdb \
|
42sh$ docker container run --rm -it --link mytsdb:influxdb --entrypoint "/usr/bin/influx" \
|
||||||
> --entrypoint "/usr/bin/influx" influxdb -host influxdb
|
influxdb -host influxdb
|
||||||
Connected to http://influxdb:8086 version 1.6.3
|
Connected to http://influxdb:8086 version 1.6.3
|
||||||
InfluxDB shell version: 1.6.3
|
InfluxDB shell version: 1.6.3
|
||||||
> show databases
|
> show databases
|
||||||
|
@ -74,8 +74,8 @@ docker container logs mytsdb
|
||||||
|
|
||||||
\hspace{2em}**Exercice :** Ajoutez à la ligne de commande de lancement du
|
\hspace{2em}**Exercice :** Ajoutez à la ligne de commande de lancement du
|
||||||
conteneur les bon(s) volume(s) qui permettront de ne pas perdre les données
|
conteneur les bon(s) volume(s) qui permettront de ne pas perdre les données
|
||||||
d'influxDB si nous devions redémarrer le conteneur.
|
d'influxDB si nous devions redémarrer le conteneur. Aidez-vous pour cela de la
|
||||||
|
[documentation du conteneur](https://hub.docker.com/_/influxdb).
|
||||||
|
|
||||||
|
|
||||||
## Collecter les données locales
|
## Collecter les données locales
|
||||||
|
@ -108,8 +108,8 @@ Et observons ensuite :
|
||||||
|
|
||||||
<div lang="en-US">
|
<div lang="en-US">
|
||||||
```bash
|
```bash
|
||||||
42sh$ docker container run --rm -it --link mytsdb:influxdb \
|
42sh$ docker container run --rm -it --link mytsdb:influxdb --entrypoint "/usr/bin/influx" \
|
||||||
> --entrypoint "/usr/bin/influx" influxdb -host influxdb
|
influxdb -host influxdb
|
||||||
InfluxDB shell version: 1.6.3
|
InfluxDB shell version: 1.6.3
|
||||||
> show databases
|
> show databases
|
||||||
name: databases
|
name: databases
|
||||||
|
|
|
@ -20,7 +20,10 @@ mettrez en place les *volumes* et *networks* nécessaire au bon fonctionnement
|
||||||
de la stack.
|
de la stack.
|
||||||
|
|
||||||
Le résultat final attendu doit permettre d'afficher dans `chronograf` l'hôte
|
Le résultat final attendu doit permettre d'afficher dans `chronograf` l'hôte
|
||||||
auto-monitoré par la stack, sans plus de configuration.
|
auto-monitoré par la stack, sans plus de configuration. Vous aurez pour cela
|
||||||
|
éventuellement besoin de placer des fichiers de configuration à côté de votre
|
||||||
|
`docker-compose.yml`, afin de pouvoir inclure ces configurations dans les
|
||||||
|
conteneurs, sans avoir besoin de reconstruire ces conteneurs.
|
||||||
|
|
||||||
|
|
||||||
Modalités de rendu
|
Modalités de rendu
|
||||||
|
@ -38,6 +41,9 @@ et exclusivement à celle-ci que vous devez envoyer vos rendus. Tout rendu
|
||||||
envoyé à une autre adresse et/ou non signé et/ou reçu après la correction ne
|
envoyé à une autre adresse et/ou non signé et/ou reçu après la correction ne
|
||||||
sera pas pris en compte.
|
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).
|
||||||
|
|
||||||
|
|
||||||
Tarball
|
Tarball
|
||||||
-------
|
-------
|
||||||
|
@ -50,11 +56,89 @@ cela dépendra de votre avancée dans le projet) :
|
||||||
|
|
||||||
<div lang="en-US">
|
<div lang="en-US">
|
||||||
```
|
```
|
||||||
login_x-TP2/
|
login_x-TP1/
|
||||||
login_x-TP2/tick/
|
login_x-TP1/ficadmin-run.sh
|
||||||
login_x-TP2/tick/docker-compose.yml
|
login_x-TP1/docker-compose.yml
|
||||||
login_x-TP2/tick/...
|
login_x-TP1/...
|
||||||
```
|
```
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
Utilisez la même tarball pour le rendu que pour la partie précédente.
|
|
||||||
|
## Signature du rendu
|
||||||
|
|
||||||
|
Deux méthodes sont utilisables pour signer votre rendu :
|
||||||
|
|
||||||
|
* signature du courriel ;
|
||||||
|
* signature de la tarball.
|
||||||
|
|
||||||
|
Dans les deux cas, si vous n'en avez pas déjà une, vous devrez créer une clef
|
||||||
|
PGP à **votre nom et prénom**.
|
||||||
|
|
||||||
|
Pour valider la signature, il est nécessaire d'avoir reçu la clef publique
|
||||||
|
**séparément**. Vous avez le choix de l'uploader sur un serveur de clefs, soit
|
||||||
|
de me fournir votre clef en main propre, soit l'envoyer dans un courriel
|
||||||
|
distinct.
|
||||||
|
|
||||||
|
### Signature du courriel
|
||||||
|
|
||||||
|
[Enigmail](https://enigmail.net) est une extension très bien réputée pour
|
||||||
|
signer ses mails depuis Thunderbird.
|
||||||
|
|
||||||
|
Utilisez le service automatique <signcheck@nemunai.re> pour savoir si votre
|
||||||
|
courriel est correctement signé et que je suis en mesure de vérifier la
|
||||||
|
signature.
|
||||||
|
|
||||||
|
|
||||||
|
### Astuces
|
||||||
|
|
||||||
|
#### No public key
|
||||||
|
|
||||||
|
Si vous recevez un rapport avec l'erreur suivante :
|
||||||
|
|
||||||
|
<div lang="en-US">
|
||||||
|
```
|
||||||
|
[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 keys.openpgp.org
|
||||||
|
gpg: Can't check signature: No public key
|
||||||
|
```
|
||||||
|
</div>
|
||||||
|
|
||||||
|
C'est que votre clef publique n'est pas dans mon trousseau et que les
|
||||||
|
méthodes de récupération automatique n'ont pas permis de la
|
||||||
|
trouver. Uploadez votre clef sur [un serveur de
|
||||||
|
clefs](https://keys.openpgp.org/) ou envoyez un courriel au service
|
||||||
|
avec votre clef publique en pièce-jointe, avant de retenter votre
|
||||||
|
rendu.
|
||||||
|
|
||||||
|
|
||||||
|
#### Not explicit username
|
||||||
|
|
||||||
|
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.
|
||||||
|
```
|
||||||
|
</div>
|
||||||
|
|
||||||
|
Votre clef ne contient sans doute pas vos noms et prénoms ou l'adresse
|
||||||
|
électronique associée à la clef n'est pas celle que j'ai dans ma base de
|
||||||
|
données.
|
||||||
|
|
||||||
|
|
||||||
|
#### I've decided to skip your e-mail
|
||||||
|
|
||||||
|
Si vous recevez un rapport concluant ainsi :
|
||||||
|
|
||||||
|
<div lang="en-US">
|
||||||
|
```
|
||||||
|
After analyzing your e-mail, I've decided to SKIP it.
|
||||||
|
```
|
||||||
|
</div>
|
||||||
|
|
||||||
|
Cela signifie que la lecture de votre courriel qui a été préférée n'est pas
|
||||||
|
celle d'un rendu. Vérifiez que vous n'envoyez pas votre clef publique avec
|
||||||
|
votre rendu.
|
||||||
|
|
|
@ -3,15 +3,15 @@
|
||||||
Mise en place
|
Mise en place
|
||||||
=============
|
=============
|
||||||
|
|
||||||
Durant le premier TP, nous avons installé l'environnement Docker principal, qui
|
Dans la première partie du TP, nous avons installé l'environnement Docker
|
||||||
inclut le client, le daemon et toute sa machinerie. Mais le projet Docker
|
principal, qui inclut le client, le daemon et toute sa machinerie. Mais le
|
||||||
propose de nombreuses autres ressources, souvent directement trouvée dans les
|
projet Docker propose de nombreuses autres ressources, souvent directement
|
||||||
usages de la communauté, et parfois même approprié par Docker.
|
trouvée dans les usages de la communauté, et parfois même approprié par Docker.
|
||||||
|
|
||||||
|
|
||||||
## `docker-compose`
|
## `docker-compose`
|
||||||
|
|
||||||
Pour ce TP, nous allons également avoir besoin de `docker-compose`.
|
Dans cette partie, nous allons avoir besoin de `docker-compose`.
|
||||||
|
|
||||||
Ce projet ne bénéficie pas d'une intégration au sein du projet Docker et doit
|
Ce projet ne bénéficie pas d'une intégration au sein du projet Docker et doit
|
||||||
être téléchargé séparément, car originellement, le projet était développé par
|
être téléchargé séparément, car originellement, le projet était développé par
|
||||||
|
@ -33,7 +33,7 @@ tous les scripts. Nous pouvons l'installer en suivant la procédure suivante :
|
||||||
|
|
||||||
<div lang="en-US">
|
<div lang="en-US">
|
||||||
```bash
|
```bash
|
||||||
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-Linux-x86_64 \
|
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-Linux-x86_64 \
|
||||||
> /usr/bin/docker-compose
|
> /usr/bin/docker-compose
|
||||||
chmod +x /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
|
||||||
<div lang="en-US">
|
<div lang="en-US">
|
||||||
```
|
```
|
||||||
42sh$ docker-compose --version
|
42sh$ docker-compose --version
|
||||||
docker-compose version: 1.16.1
|
docker-compose version: 1.24.1
|
||||||
```
|
```
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ TP ! Alors n'attendons pas, partons à l'aventure !
|
||||||
|
|
||||||
## Play With Docker
|
## Play With Docker
|
||||||
|
|
||||||
Tout comme pour le TP précédent, si vous avez des difficultés pour réaliser les
|
Tout comme pour la partie précédente, si vous avez des difficultés pour
|
||||||
exercices sur vos machines, vous pouvez utiliser le projet
|
réaliser les exercices sur vos machines, vous pouvez utiliser le projet [Play
|
||||||
[Play With Docker](https://play-with-docker.com/) qui vous donnera accès à un
|
With Docker](https://play-with-docker.com/) qui vous donnera accès à un bac à
|
||||||
bac à sable avec lequel vous pourrez réaliser tous les exercices de ce TP.
|
sable avec lequel vous pourrez réaliser tous les exercices de ce TP.
|
||||||
|
|
|
@ -1,23 +1,24 @@
|
||||||
---
|
---
|
||||||
title: Virtualisation légère -- TP n^o^ 2.2
|
title: Virtualisation légère -- TP n^o^ 1.2
|
||||||
subtitle: Aller plus loin avec Docker
|
subtitle: Les bases de Docker -- compose
|
||||||
author: Pierre-Olivier *nemunaire* [Mercier]{.smallcaps}
|
author: Pierre-Olivier *nemunaire* [Mercier]{.smallcaps}
|
||||||
institute: EPITA
|
institute: EPITA
|
||||||
date: Jeudi 18 octobre 2017
|
date: Mercredi 2 octobre 2019
|
||||||
abstract: |
|
abstract: |
|
||||||
Dans cette deuxième partie du TP, nous allons approfondir l'utilisation de
|
Dans cette deuxième partie du TP, nous allons apprendre à déployer
|
||||||
Docker !
|
un groupe de conteneurs !
|
||||||
|
|
||||||
\vspace{1em}
|
\vspace{1em}
|
||||||
|
|
||||||
Tous les éléments de ce TP (exercices et projet) sont à rendre à
|
Le TP se termine par un petit projet à rendre à <virli@nemunai.re>
|
||||||
<virli@nemunai.re> au plus tard le mercredi 24 octobre 2017 à 0
|
au plus tard le mercredi 16 octobre 2019 à 13 h 42, des questions de
|
||||||
h 42. Consultez la dernière section de chaque partie pour plus d'information
|
cours sont également à compléter avant cette date sur
|
||||||
sur les éléments à rendre.
|
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,
|
En tant que personnes sensibilisées à la sécurité des échanges
|
||||||
vous devrez m'envoyer vos rendus signés avec votre clef PGP. Pensez à
|
électroniques, vous devrez m'envoyer vos rendus signés avec votre
|
||||||
[me](https://pgp.mit.edu/pks/lookup?op=vindex&search=0x842807A84573CC96)
|
clef PGP. Pensez à
|
||||||
faire signer votre clef et n'hésitez pas à [faire signer votre
|
[me](https://keys.openpgp.org/search?q=nemunaire%40nemunai.re)
|
||||||
clef](https://www.meetup.com/fr/Paris-certification-de-cles-PGP-et-CAcert/).
|
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/).
|
||||||
...
|
...
|
||||||
|
|
|
@ -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 secrets.md rendu.md
|
SOURCES = tutorial.md installation.md what.md first.md cleaning.md ex-flask.md volumes.md linking.md
|
||||||
|
|
||||||
|
|
||||||
all: tutorial.pdf
|
all: tutorial.pdf
|
||||||
|
|
|
@ -65,9 +65,10 @@ docker container prune
|
||||||
```
|
```
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
On aura tendance à vouloir supprimer tous les objets inutiles d'un seul coup, via :
|
||||||
|
|
||||||
## `docker-gc`
|
<div lang="en-US">
|
||||||
|
```bash
|
||||||
Vous pouvez également utiliser l'image
|
docker system prune
|
||||||
[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 !
|
</div>
|
||||||
|
|
|
@ -100,7 +100,7 @@ il s'agit des mêmes options\ :
|
||||||
|
|
||||||
<div lang="en-US">
|
<div lang="en-US">
|
||||||
```bash
|
```bash
|
||||||
docker container run -d -p 8080:8081 nemunaire/youp0m
|
docker container run -d -p 8081:8080 nemunaire/youp0m
|
||||||
```
|
```
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -111,6 +111,41 @@ voit bien que ceux-ci ne partagent pas leur système de fichiers : notre
|
||||||
nouvelle instance est encore immaculée.
|
nouvelle instance est encore immaculée.
|
||||||
|
|
||||||
|
|
||||||
|
## Paramètres de lancement
|
||||||
|
|
||||||
|
`youp0m` dispose d'une interface d'administration minimaliste, pour modérer les
|
||||||
|
images soumises. Celle-ci est accessible par mot de passe (ou est désactivée si
|
||||||
|
aucun identifiant n'est trouvé). L'aide du programme indique que cela est géré
|
||||||
|
par l'argument `-htpasswd`, mais encore faut-il pouvoir recopier un fichier
|
||||||
|
créé à l'extérieur du conteneur...
|
||||||
|
|
||||||
|
Outre les arguments que l'on peut passer au premier processus du conteneur, la
|
||||||
|
plupart des images peuvent adapter leur comportement en fonction de variables
|
||||||
|
d'environnement que l'on passe en paramètre.
|
||||||
|
|
||||||
|
Cette bonne pratique est recommandée par <https://12factor.net/>, qui détaille
|
||||||
|
les raisons qui devraient pousser les développeurs à privilégier les variables
|
||||||
|
d'environnements aux arguments sur la ligne de commande.
|
||||||
|
|
||||||
|
Il se trouve que les conteneurs `youp0m` peuvent créer le fichier `htpasswd`,
|
||||||
|
s'ils sont démarrés avec les variables d'environnement :
|
||||||
|
|
||||||
|
- `YOUP0M_USERNAME` : nom d'utilisateur pour l'administrateur (par défaut admin) ;
|
||||||
|
- `YOUP0M_PASSWORD` : mot de passe de l'utilisateur.
|
||||||
|
|
||||||
|
Pour ajouter une variable d'environnement, cela se passe dans la commande
|
||||||
|
`run`, en ajoutant une ou plusieurs options `-e` :
|
||||||
|
|
||||||
|
<div lang="en-US">
|
||||||
|
```bash
|
||||||
|
docker container run -e YOUP0M_PASSWORD=foobar -p 8080:8080 nemunaire/youp0m
|
||||||
|
```
|
||||||
|
</div>
|
||||||
|
|
||||||
|
Une fois lancé, ce conteneur exposera une interface d'administration à cette
|
||||||
|
adresse : <http://localhost:8080/admin/>.
|
||||||
|
|
||||||
|
|
||||||
## Arrêt des conteneurs et persistance des données
|
## Arrêt des conteneurs et persistance des données
|
||||||
|
|
||||||
Lorsque l'on souhaite stopper un conteneur lancé en tâche de fond, on utilise
|
Lorsque l'on souhaite stopper un conteneur lancé en tâche de fond, on utilise
|
||||||
|
|
|
@ -105,7 +105,7 @@ transféré dans le conteneur.
|
||||||
|
|
||||||
Pour nous en convaincre, nous pouvons tenter d'exécuter un programme qui n'est
|
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
|
pas présent sur notre machine, mais bien uniquement dans le conteneur. Si vous
|
||||||
n'utilisez pas [Alpine Linux](https://www.alpine-linux.org), vous pourriez
|
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">
|
<div lang="en-US">
|
||||||
|
|
|
@ -46,11 +46,8 @@ correspondant à votre distribution :
|
||||||
|
|
||||||
<https://docs.docker.com/install/linux/docker-ce/debian/>
|
<https://docs.docker.com/install/linux/docker-ce/debian/>
|
||||||
|
|
||||||
|
**Et Kali Linux alors ?** Kali étant basée sur Debian, référez-vous à
|
||||||
### Et Kali Linux alors ?
|
la procédure d'installation de cette distribution.
|
||||||
|
|
||||||
Kali étant basée sur Debian, référez-vous à la procédure d'installation de
|
|
||||||
Debian *Jessie or newer*.
|
|
||||||
|
|
||||||
|
|
||||||
## Windows et macOS
|
## Windows et macOS
|
||||||
|
@ -62,8 +59,8 @@ 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 :
|
||||||
|
|
||||||
* [Docker for Mac](https://store.docker.com/editions/community/docker-ce-desktop-mac)
|
* [Docker for Mac](https://hub.docker.com/editions/community/docker-ce-desktop-mac)
|
||||||
* [Docker for Windows](https://store.docker.com/editions/community/docker-ce-desktop-windows)
|
* [Docker for Windows](https://hub.docker.com/editions/community/docker-ce-desktop-windows)
|
||||||
|
|
||||||
Une fois l'installation terminée, lancez l'application : elle ajoutera une
|
Une fois l'installation terminée, lancez l'application : elle ajoutera une
|
||||||
icône dans la zone de notification, vous permettant de contrôler l'exécution de
|
icône dans la zone de notification, vous permettant de contrôler l'exécution de
|
||||||
|
@ -76,6 +73,10 @@ Si vous rencontrez des difficultés pour vous lancer, le projet
|
||||||
[Play With Docker](https://labs.play-with-docker.com/) vous donne accès à
|
[Play With Docker](https://labs.play-with-docker.com/) vous donne accès à
|
||||||
un bac à sable dans lequel vous pourrez commencer à faire ce TP.
|
un bac à sable dans lequel vous pourrez commencer à faire ce TP.
|
||||||
|
|
||||||
|
Il vous faudra disposer [d'un compte
|
||||||
|
Docker](https://hub.docker.com/signup). Une fois identifié, vous pourrez créer
|
||||||
|
une nouvelle instance, et vous connecter dessus via SSH.
|
||||||
|
|
||||||
|
|
||||||
## Vérifier la bonne marche de l'installation
|
## Vérifier la bonne marche de l'installation
|
||||||
|
|
||||||
|
|
BIN
tutorial/docker-basis/layers.png
Normal file
BIN
tutorial/docker-basis/layers.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 73 KiB |
|
@ -20,7 +20,7 @@ partie comment lier deux conteneurs.
|
||||||
## Mise en place du webservice
|
## Mise en place du webservice
|
||||||
|
|
||||||
Nous allons utiliser l'interface d'administration des serveurs du FIC :
|
Nous allons utiliser l'interface d'administration des serveurs du FIC :
|
||||||
[`nemunaire/fic-admin`](https://hub.docker.com/r/nemunaire/fic-admin/).
|
[`nemunaire/fic-admin`](https://hub.docker.com/r/nemunaire/fic-admin).
|
||||||
|
|
||||||
En lançant le conteneur avec les mêmes options que `youp0m`, les journaux
|
En lançant le conteneur avec les mêmes options que `youp0m`, les journaux
|
||||||
indiquent que le service cherche à se connecter à une base de données. Il va
|
indiquent que le service cherche à se connecter à une base de données. Il va
|
||||||
|
@ -98,29 +98,6 @@ 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
|
||||||
|
@ -128,31 +105,63 @@ de données.
|
||||||
|
|
||||||
Ne vous embêtez pas avec les mots de passes des services, initialisez la base
|
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
|
de données avec le nom d'utilisateur et le mot de passe par défaut. Vous les
|
||||||
obtiendrez en lisant l'aide :
|
obtiendrez en lisant l'aide (et la [documentation de l'image
|
||||||
|
MySQL](https://hub.docker.com/_/mysql/)) :
|
||||||
|
|
||||||
<div lang="en-US">
|
<div lang="en-US">
|
||||||
```bash
|
```bash
|
||||||
docker container run --rm -e MYSQL_HOST="tcp(mysql_cntr_name:3306)" nemunaire/fic-admin -help
|
docker container run --rm -e MYSQL_HOST=mysql_cntr_name nemunaire/fic-admin -help
|
||||||
```
|
```
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
Notez la définition de la variable d'environnement `MYSQL_HOST`[^12factors],
|
Notez la définition de la variable d'environnement `MYSQL_HOST`, celle-ci
|
||||||
celle-ci indique le nom du serveur vers lequel le service doit se connecter.
|
indique le nom du serveur vers lequel le service doit se connecter.
|
||||||
|
|
||||||
[^12factors]: Lecture intéressante : <https://12factor.net/>
|
|
||||||
|
|
||||||
Vous aurez besoin de créer un volume pour stocker la base de données, un réseau
|
Vous aurez besoin de créer un volume pour stocker la base de données, un réseau
|
||||||
dans lequel vous connecterez la base de données et le conteneur applicatif.
|
dans lequel vous connecterez la base de données et le conteneur applicatif.
|
||||||
|
|
||||||
Vous devriez pouvoir déboguer le réseau, au sein d'un conteneur, par exemple en
|
Une fois le service `fic-admin` lancé, vous pouvez exposer le port 8081, sur
|
||||||
utilisant :
|
lequel vous devriez voir l'interface d'admin : <http://localhost:8081/>.
|
||||||
|
|
||||||
|
Placez les différentes commandes (volumes, réseau, `run`, ...) dans un
|
||||||
|
script `ficadmin-run.sh`, que vous rendrez à la fin du TP. Vous
|
||||||
|
devriez pouvoir appeler ce script plusieurs fois, sans que les données
|
||||||
|
ne soient perdues, entre deux arrêts.
|
||||||
|
|
||||||
|
|
||||||
|
### Exemple d'exécution
|
||||||
|
|
||||||
<div lang="en-US">
|
<div lang="en-US">
|
||||||
```
|
```bash
|
||||||
42sh$ docker container exec -it ficadmin_cntr_name /bin/bash
|
42sh$ ./ficadmin-run.sh
|
||||||
(incntnr)# ping mysql_cntr_name
|
http://localhost:12345/
|
||||||
|
42sh$ #docker kill db ficadmin
|
||||||
|
42sh$ ./ficadmin-run.sh # le script relancera une base de données,
|
||||||
|
# sans avoir perdu les données
|
||||||
|
http://localhost:12345/
|
||||||
```
|
```
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
Une fois le service `fic-admin` lancé, vous pouvez exposer le port 8081, sur
|
|
||||||
lequel vous devriez voir l'interface d'admin : <http://localhost:8081/>.
|
### 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.
|
||||||
|
|
||||||
|
En réalisant l'exercice, vous serez sans doute confronté à des comportements
|
||||||
|
étranges, que vous ne pourriez comprendre qu'en ayant la main sur le conteneur,
|
||||||
|
via un shell.
|
||||||
|
|
||||||
|
Lorsqu'un conteneur est actif, vous pouvez y lancer un nouveau processus,
|
||||||
|
notamment un shell par exemple.
|
||||||
|
|
||||||
|
<div lang="en-US">
|
||||||
|
```bash
|
||||||
|
docker container exec -it ficadmin /bin/bash
|
||||||
|
(inctnr)$ ping mysql_cntr_name
|
||||||
|
```
|
||||||
|
</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.
|
||||||
|
|
|
@ -114,16 +114,17 @@ Si vous recevez un rapport avec l'erreur suivante :
|
||||||
|
|
||||||
gpg: Signature made Tue Jan 01 16:42:23 2014 CET
|
gpg: Signature made Tue Jan 01 16:42:23 2014 CET
|
||||||
gpg: using RSA key 842807A84573CC96
|
gpg: using RSA key 842807A84573CC96
|
||||||
gpg: requesting key E2CCD99DD37BD32E from hkp server pool.sks-keyservers.net
|
gpg: requesting key E2CCD99DD37BD32E from hkp server keys.openpgp.org
|
||||||
gpg: Can't check signature: No public key
|
gpg: Can't check signature: No public key
|
||||||
```
|
```
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
C'est que votre clef publique n'est pas dans mon trousseau et que les méthodes
|
C'est que votre clef publique n'est pas dans mon trousseau et que les
|
||||||
de récupération automatique n'ont pas permis de la trouver. Uploadez votre
|
méthodes de récupération automatique n'ont pas permis de la
|
||||||
clef sur un serveur de clefs (et attendez quelques minutes sa propagation) ou
|
trouver. Uploadez votre clef sur [un serveur de
|
||||||
envoyez un courriel au service avec votre clef publique en pièce-jointe, avant
|
clefs](https://keys.openpgp.org/) ou envoyez un courriel au service
|
||||||
de retenter votre rendu.
|
avec votre clef publique en pièce-jointe, avant de retenter votre
|
||||||
|
rendu.
|
||||||
|
|
||||||
|
|
||||||
#### Not explicit username
|
#### Not explicit username
|
||||||
|
|
|
@ -10,14 +10,14 @@ abstract: |
|
||||||
\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 mercredi 16 octobre 2018 à 13 h 42, des questions de
|
au plus tard le mercredi 16 octobre 2019 à 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.
|
||||||
|
|
||||||
En tant que personnes sensibilisées à la sécurité des échanges
|
En tant que personnes sensibilisées à la sécurité des échanges
|
||||||
électroniques, vous devrez m'envoyer vos rendus signés avec votre
|
électroniques, vous devrez m'envoyer vos rendus signés avec votre
|
||||||
clef PGP. Pensez à
|
clef PGP. Pensez à
|
||||||
[me](https://pgp.mit.edu/pks/lookup?op=vindex&search=0x842807A84573CC96)
|
[me](https://keys.openpgp.org/search?q=nemunaire%40nemunai.re)
|
||||||
faire signer votre clef et n'hésitez pas à [faire signer la
|
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/).
|
votre](https://www.meetup.com/fr/Paris-certification-de-cles-PGP-et-CAcert/).
|
||||||
...
|
...
|
||||||
|
|
|
@ -74,15 +74,6 @@ docker container run --name mydb --mount source=prod_db,target=/var/lib/mysql \
|
||||||
Lorsque le volume est vide, si des données sont présentes à l'endroit du point
|
Lorsque le volume est vide, si des données sont présentes à l'endroit du point
|
||||||
de montage, celles-ci sont recopiées dans le volume.
|
de montage, celles-ci sont recopiées dans le volume.
|
||||||
|
|
||||||
Si plus tard, vous souhaitez créer un conteneur chargé de faire des
|
|
||||||
sauvegardes, vous pourriez le lancer comme ceci :
|
|
||||||
|
|
||||||
<div lang="en-US">
|
|
||||||
```bash
|
|
||||||
docker container run -it --volume-from mydb busybox /bin/bash
|
|
||||||
```
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
## Volumes temporaires
|
## Volumes temporaires
|
||||||
|
|
||||||
|
@ -101,3 +92,29 @@ docker container run --mount type=tmpfs,target=/srv/images nemunaire/youp0m
|
||||||
En cas de crash de la machine, le contenu sera perdu, mais il reste
|
En cas de crash de la machine, le contenu sera perdu, mais il reste
|
||||||
possible d'utiliser `--volume-from` afin de partager le volume avec un
|
possible d'utiliser `--volume-from` afin de partager le volume avec un
|
||||||
autre conteneur.
|
autre conteneur.
|
||||||
|
|
||||||
|
|
||||||
|
## Partage de volumes entre conteneurs
|
||||||
|
|
||||||
|
Les volumes sont des espaces détachés des conteneurs, particulièrement utiles
|
||||||
|
pour mettre à jour ou relancer un conteneur, sans perdre les données. Un autre
|
||||||
|
intérêt, est de pouvoir partager des fichiers entre plusieurs conteneurs.
|
||||||
|
|
||||||
|
Il est ainsi parfaitement possible de lancer deux conteneurs qui partagent le
|
||||||
|
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
|
||||||
|
```
|
||||||
|
</div>
|
||||||
|
|
||||||
|
Dans cet exemple, l'ajout d'une image dans un conteneur, l'ajoutera également
|
||||||
|
dans le second.
|
||||||
|
|
||||||
|
Un exemple plus intéressant serait sur une architecture de micro-services
|
||||||
|
traitant des fichiers de grande taille : plutôt que de faire passer les
|
||||||
|
fichiers par un système de message/socket, on peut partager un volume pour
|
||||||
|
épargner les coûts de transferts inutiles, lorsqu'ils ne changent pas de
|
||||||
|
machine.
|
||||||
|
|
|
@ -63,8 +63,7 @@ Les registres sont des plates-formes de stockage, publiques ou privées,
|
||||||
contenant des images. Ils permettent de récupérer des images, mais également
|
contenant des images. Ils permettent de récupérer des images, mais également
|
||||||
d'en envoyer.
|
d'en envoyer.
|
||||||
|
|
||||||
Le registre utilisé de base est le [Docker Store](https://store.docker.com/) :
|
Le registre utilisé de base est le [Docker Hub](https://hub.docker.com/) : il
|
||||||
il contient à la fois des images officielles (ubuntu, debian, nginx, ...), des
|
contient à la fois des images officielles (ubuntu, debian, nginx, ...), des
|
||||||
images créées par des utilisateurs ([Docker Hub](https://hub.docker.com/)),
|
images créées par des utilisateurs, mais aussi des images de grands éditeurs,
|
||||||
mais aussi des images de grands éditeurs, payantes, à destination des
|
payantes, à destination des entreprises.
|
||||||
entreprises.
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue