virli/tutorial/2/compose.md

3.6 KiB

\newpage

Compose

Avec notre conteneur utilisant supervisor, nous ne respectons pas bien cette dernière bonne pratique d'un seul processus par conteneur :-(

L'intérêt est de permettre à chaque conteneur d'effectuer une tâche générique, de manière à pouvoir être réutilisé pour d'autres projets dans le futur. Par exemple, notre conteneur InfluxDB pourra être utilisé pour stocker des relevés de métriques systèmes ou des logs. Chronograf peut être connecté à d'autres serveurs afin de corréler les métriques, ...

Séparer le Dockerfile

Commençons par séparer notre Dockerfile en deux : dans une partie nous allons garder la partie InfluxDB, de l'autre la partie Chronograf.

Il va vous falloir créer deux dossiers distincts, il en faut un par Dockerfile : réutilisez l'image influxdb créée précédemment et créez le dossier pour l'image chronograf.

Profitez en pour rajouter les Data Volume Container, si vous ne l'avez pas fait dans la partie précédente !

\vspace{1em}

Pour tester la bonne marche de vos conteneurs, vous pouvez le lancer votre conteneur chronograf avec la commande suivante (en considérant que votre conteneur influxdb de la première partie est toujours lancé).

docker run --rm --link YOUR_INFLUX_CNTR_NAME:influxdb chronograf

Remplacez YOUR_INFLUX_CNTR_NAME par le nom du conteneur qui fait tourner votre influxdb. En créant ce lien, chronograf sera capable de contacter une machine influxdb (la partie après les :).

Visualiser les données dans chronograf

Avant d'arrêter telegraf et nos conteneurs pour passer à une nouvelle étape, prenez le temps d'afficher les données que vous avez collecté depuis le début du TP.

Après avoir ajouté le serveur (en remplaçant localhost proposé par défaut par influxdb issue du link), ajouter deux visualisations avec les requêtes suivantes :

SELECT used, available, cached FROM mem WHERE tmpltime()
SELECT mean(usage_idle) FROM cpu WHERE tmpltime() GROUP BY time(20s), cpu

Automatiser la construction et le lancement

Commencez par lancer tous vos conteneurs à la main pour voir les étapes que vous allez devoir automatiser.

Au lieu de faire un script pour construire et lancer tous vos conteneurs, définissez à la racine de votre projet un fichier docker-compose.yml qui contiendra les méthodes de construction et les paramètres d'exécution.

version: '2'
services:
  influxdb:
    ...
  chronograf:
    build: grafana/
    image: nginx
    ports:
      - "3000:3000"
    volumes:
      - ./:/tmp/toto
    links:
     - influxdb

Ce fichier est un condensé des options que vous passez habituellement au docker run.

L'exemple ci-dessus est à adapter largement, consultez http://docs.docker.com/compose/compose-file/ pour une liste exhaustive des options que vous pouvez utiliser.

Notez 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.

Une fois que votre docker-compose.yml sera prêt, lancez tout d'abord docker-compose build pour commencer la phase de build de tous les conteneurs listés dans le fichier.

Une fois le build terminé, vous pouvez lancer la commande suivante et admirer le résultat :

docker-compose up

Encore une fois, testez la bonne connexion entre chronograf (accessible sur http://localhost:10000) et influxdb.

Rendu

Pour cette partie, vous devrez rendre la dernière itération de votre docker-compose.yml.