virli/tutorial/docker-advanced/manual.md

219 lines
6.4 KiB
Markdown
Raw Normal View History

\newpage
2017-10-16 01:10:34 +00:00
Lier des conteneurs
-------------------
2017-10-16 01:10:34 +00:00
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
conteneurs manuellement, de la même manière que nous avons pu le faire avec
2022-02-24 19:43:43 +00:00
MySQL. Cela nous permettra de voir les subtilités de chaque image, ce qui nous
fera gagner du temps pour ensuite en faire la description.
2017-10-16 01:10:34 +00:00
### Conteneur central: la base de données
2017-10-16 01:10:34 +00:00
Le premier conteneur qui doit être lancé est la base de données orientée séries
2021-09-19 22:19:49 +00:00
temporelles:
2017-10-16 01:10:34 +00:00
[InfluxDB](https://www.influxdata.com/time-series-platform/influxdb/).
2019-10-16 01:54:56 +00:00
En effet, tous les autres conteneurs ont besoin de cette base de données pour
2021-09-19 22:19:49 +00:00
fonctionner correctement\: il serait impossible à *Chronograf* d'afficher les
2017-10-16 01:10:34 +00:00
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.
Afin d'interagir avec les données, InfluxDB expose une
[API REST](https://fr.wikipedia.org/wiki/Representational_state_transfer)
sur le port 8086. Pour éviter d'avoir plus de configuration à réaliser, nous
2021-09-19 22:19:49 +00:00
allons tâcher d'utiliser ce même port pour tester localement:
2017-10-16 01:10:34 +00:00
2017-10-17 06:29:07 +00:00
<div lang="en-US">
2017-10-16 01:10:34 +00:00
```
2021-09-19 22:19:49 +00:00
docker container run -p 8086:8086 -d --name mytsdb influxdb:1.8
2017-10-16 01:10:34 +00:00
```
2017-10-17 06:29:07 +00:00
</div>
2017-10-16 01:10:34 +00:00
Comme il s'agit d'une API REST, nous pouvons vérifier le bon fonctionnement de
2021-09-19 22:19:49 +00:00
notre base de données en appelant:
2017-10-16 01:10:34 +00:00
2017-10-17 06:29:07 +00:00
<div lang="en-US">
2017-10-16 01:10:34 +00:00
```
42sh$ curl -f http://localhost:8086/ping
42sh$ echo $?
0
2017-10-16 01:10:34 +00:00
```
2017-10-17 06:29:07 +00:00
</div>
2017-10-16 01:10:34 +00:00
2021-09-19 22:19:49 +00:00
Notez que comme nous avons lancé le conteneur en mode détaché (option `-d`),
nous ne voyons pas les logs qui sont écrits par le daemon. Pour les voir, il
faut utiliser la commande `docker container logs`:
<div lang="en-US">
```
docker container logs mytsdb
```
</div>
2017-10-16 01:10:34 +00:00
Si votre influxdb répond, vous pouvez vous y connecter en utilisant directement
2021-09-19 22:19:49 +00:00
le client officiel (le binaire s'appelle `influx`):
2017-10-16 01:10:34 +00:00
2017-10-17 06:29:07 +00:00
<div lang="en-US">
2017-10-16 01:10:34 +00:00
```
2022-02-24 19:43:43 +00:00
42sh$ docker container run --rm -it --link mytsdb:influxdb influxdb:1.8 \
influx -host influxdb
2021-09-16 01:45:54 +00:00
Connected to http://influxdb:8086 version 1.8.9
InfluxDB shell version: 1.8.9
> show databases
name: databases
name
---------------
_internal
2017-10-16 01:10:34 +00:00
```
2017-10-17 06:29:07 +00:00
</div>
2017-10-16 01:10:34 +00:00
2022-02-24 19:43:43 +00:00
Si vous aussi vous voyez la table `_internal`, bravo! vous pouvez passer à la
2017-10-16 01:10:34 +00:00
suite.
2022-02-24 19:43:43 +00:00
#### Mais quelle était cette commande magique? {-}
2021-09-19 22:19:49 +00:00
Oui, prenons quelques minutes pour l'analyser...
L'option `--link` permet de lier deux conteneurs. Ici nous souhaitons lancer un
nouveau conteneur pour notre client, en ayant un accès réseau au conteneur
`mytsdb` que nous avons créé juste avant. L'option `--link` prend en argument
le nom d'un conteneur en cours d'exécution (ici `mytsdb`, nom que l'on a
attribué à notre conteneur exécutant la base de données influxdb via l'option
`--name`), après les `:`, on précise le nom d'hôte que l'on souhaite attribuer
à cette liaison, au sein de notre nouveau conteneur.
`influx -host influxdb` que nous avons placé après le nom de l'image,
correspond à la première commande que l'on va exécuter dans notre conteneur, à
la place du daemon `influxdb`. Ici nous voulons exécuter le client, il
s'appelle `influx`, auquel nous ajoutons le nom de l'hôte dans lequel nous
souhaitons nous connecter: grâce à l'option `--link`, le nom d'hôte à utiliser
est `influxdb`.
L'option `--link` peut être particulièrement intéressante lorsque l'on souhaite
sauvegarder une base, car en plus de définir un nom d'hôte, cette option fait
hériter le nouveau conteneur des variables d'environnement du conteneur
auquel elle est liée: on a donc accès aux `$MYSQL_USER`,
`$MYSQL_PASSWORD`,...
On aurait aussi pu créer un réseau entre nos deux conteneurs (via `docker
network`), ou bien encore, on aurait pu exécuter notre client `influx`
directement dans le conteneur de sa base de données:
2017-10-16 01:10:34 +00:00
2017-10-17 06:29:07 +00:00
<div lang="en-US">
2017-10-16 01:10:34 +00:00
```
2021-09-19 22:19:49 +00:00
42sh$ docker container exec mytsdb influx -execute "show databases"
name: databases
name
---------------
_internal
2017-10-16 01:10:34 +00:00
```
2017-10-17 06:29:07 +00:00
</div>
2017-10-16 01:10:34 +00:00
2021-09-19 22:19:49 +00:00
Dans ce dernier exemple, nous n'avons pas besoin de préciser l'hôte, car
`influx` va tenter `localhost` par défaut, et puisque nous lançons la commande
dans notre conteneur `mytsdb`, il s'agit bien du conteneur où s'exécute
localement `influxdb`.
::::: {.exercice}
2017-10-16 01:10:34 +00:00
2021-09-19 22:19:49 +00:00
Ajoutez à la ligne de commande de lancement du conteneur les bon(s) volume(s)
qui permettront de ne pas perdre les données d'influxDB si nous devions
redémarrer le conteneur. Aidez-vous pour cela de la [documentation du
conteneur](https://hub.docker.com/_/influxdb).
2017-10-16 01:10:34 +00:00
:::::
2017-10-16 01:10:34 +00:00
### Collecter les données locales
2017-10-16 01:10:34 +00:00
Tentons maintenant de remplir notre base de données avec les métriques du
2021-09-19 22:19:49 +00:00
système. Pour cela, on commence par télécharger *Telegraf*:
2017-10-16 01:10:34 +00:00
2017-10-17 06:29:07 +00:00
<div lang="en-US">
```bash
2022-02-24 19:43:43 +00:00
V=1.19.2
P=telegraf-${V}_linux_$(uname -m)
curl https://dl.influxdata.com/telegraf/releases/${P}.tar.gz | \
tar xzv -C /tmp
2017-10-16 01:10:34 +00:00
```
2017-10-17 06:29:07 +00:00
</div>
2017-10-16 01:10:34 +00:00
2021-09-19 22:19:49 +00:00
Puis, lançons *Telegraf*:
2017-10-16 01:10:34 +00:00
2017-10-17 06:29:07 +00:00
<div lang="en-US">
```bash
cd /tmp/telegraf
2020-09-21 21:48:16 +00:00
./usr/bin/telegraf --config etc/telegraf/telegraf.conf
2017-10-16 01:10:34 +00:00
```
2017-10-17 06:29:07 +00:00
</div>
2017-10-16 01:10:34 +00:00
2022-02-26 10:03:32 +00:00
::::: {.more}
2017-10-16 01:10:34 +00:00
2021-09-19 22:19:49 +00:00
La configuration par défaut va collecter les données de la machine locale et
les envoyer sur le serveur situé à <http://localhost:8086>. Ici, cela
fonctionne parce que l'on a fait en sorte de rediriger le port de notre
conteneur sur notre machine locale (option `-p`).
2022-02-26 10:03:32 +00:00
:::::
2021-09-19 22:19:49 +00:00
Et observons ensuite:
2017-10-16 01:10:34 +00:00
2017-10-17 06:29:07 +00:00
<div lang="en-US">
```bash
2022-02-24 19:43:43 +00:00
42sh$ docker container run --rm -it --link mytsdb:zelda influxdb:1.8 \
influx -host zelda
2021-09-16 01:45:54 +00:00
InfluxDB shell version: 1.8.9
> show databases
name: databases
name
---------------
_internal
telegraf
> use telegraf
Using database telegraf
> show measurements
name: measurements
name
------------------
cpu
disk
diskio
kernel
mem
processes
swap
system
2017-10-16 01:10:34 +00:00
```
2017-10-17 06:29:07 +00:00
</div>
2017-10-16 01:10:34 +00:00
2021-09-19 22:19:49 +00:00
La nouvelle base a donc bien été créée et tant que nous laissons *Telegraf*
2017-10-16 01:10:34 +00:00
lancé, celui-ci va régulièrement envoyer des métriques de cette machine.
::::: {.exercice}
2017-10-16 01:10:34 +00:00
### Afficher les données collectées
2017-10-16 01:10:34 +00:00
2021-09-19 22:19:49 +00:00
À vous de jouer pour lancer le conteneur
2017-10-16 01:10:34 +00:00
[*Chronograf*](https://store.docker.com/images/chronograf).
L'interface de *Chronograf* est disponible sur le port 8888.
Consultez la [documentation du conteneur](https://hub.docker.com/_/chronograf)
si besoin.
2017-10-16 01:10:34 +00:00
2022-02-26 10:03:32 +00:00
::::: {.warning}
2021-09-19 22:19:49 +00:00
2022-05-04 09:18:16 +00:00
La page d'accueil est vide au démarrage, pour savoir si vous avez réussi,
2021-09-19 22:19:49 +00:00
rendez-vous sous l'onglet *Hosts*, le nom de votre machine devrait y
apparaître. En cliquant dessus, vous obtiendrez des graphiques similaires à
2022-02-24 19:43:43 +00:00
ceux ci-après:
2018-10-19 23:51:25 +00:00
2022-02-26 10:03:32 +00:00
:::::
:::::
2017-10-16 01:10:34 +00:00
![Résultat obtenu](chronograf_latest.png)