Docker Compose Tutorial
Docker Compose Tutorial
Docker Compose Tutorial
Objectifs :
Prise en main des systèmes de gestion de conteneurs : Docker comme exemple.
Dans cette partie, on veut créer une application IoT qui nous permet de collecter les données
de température, humidité depuis un capteur DHT et stocké les données dans une base de
données et par la suite créer une Dashboard pour afficher les données en temps réel.
L’architecture de l’application est comme suite :
On aura une carte de développement qui collecte les données depuis un capteur DHT, puis les
envois en utilisant le protocole MQTT. Pour cette application, on va installer le broker de
MQTT dans la carte Raspberry Pi. Dans la carte Raspberry Pi on aura quatre services
installés :
Eclipse-Mosquitto: le broker MQTT.
Node-Red : pour recevoir les données en utilisant MQTT et les stocké dans la base de
données Influx.
InfluxDB : une base de données pour stocké les données collecté.
Grafana : une application qui permet la visualisation des données.
Tous ces services seront installés sous forme de conteneurs Docker, sauf Node-Red qui va
être installé directement dans Raspberry Pi.
Dans ce qui suit, on va supposer que vous avez Docker déjà installé dans votre Raspberry Pi,
sinon, vous devez l’installer avant de continuer.
Pour l’installation des conteurs, on va utiliser Docker compose. Pour ce faire on va suivre les
étapes suivantes :
1. Créer un dosser qui porte le nom weather_station_app :
$ mkdir weather_station_app
$ cd weather_statio_app
2. Dans ce dossier, on va créer 3 autres dossier ; influxdb, influxdb2 et mosquitto_config
$ mkdir influxdb influxdb2 mosquitto_config
3. Dans le dossier mosquitto_config on va créer un fichier nommé moquitto.conf :
$ touch mosquitto_config/mosquitto.conf
4. Nous allons ouvrir le fichier mosquitto.conf avec un éditeur de texte et modifier son
contenu, ici on va utiliser l’éditeur nano :
$ nano moquitto_config/mosquitto.conf
5. Nous allons modifier le contenu de ce fichier avec les lignes suivantes :
allow_anonymous true
listener 1883
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
6. Pour enregistrer les modifications nous allons appuyer sur Ctrl+O puis Entrer, puis
pour quitter l’éditeur nous allons appuyer sur Ctrl+X.
7. On doit créer un fichier nommée docker-compose.yml et modifier son contenu :
$ nano docker-compose.yml
8. Modifier le contenu du fichier par les lignes suivantes:
version: "3.9"
services:
mosquitto:
image: "eclipse-mosquitto"
ports:
- "1883:1883"
volumes:
- ./mosquitto_config/:/mosquitto/config/
grafana:
image: "grafana/grafana:latest"
ports:
- "3000:3000"
influxdb:
image: "influxdb:1.8"
ports:
- "8086:8086"
volumes:
- ./influxdb/:/var/lib/influxdb
- ./influxdb2/:/var/lib/influxdb2
environment:
- DOCKER_INFLUXDB_INIT_MODE=upgrade
- DOCKER_INFLUXDB_INIT_USERNAME=admin
- DOCKER_INFLUXDB_INIT_PASSWORD=admin123
- DOCKER_INFLUXDB_INIT_ORG=UIR
- DOCKER_INFLUXDB_INIT_BUCKET=weather-station
9. Enregistrer les modifications son appuyant sur Ctrl+O, Enter, puis fermé l’éditeur en
appuyant sur Ctrl+X.
10. La structure finale du dossier doit ressembler à l’image suivante :
$ docker compose up -d
Cette commande va vérifier si les images des services mentionné dans le fichier docker-
compose.yml son déjà téléchargé, sinon il va les télécharger. Après il va lancer les conteneurs
et les configuré selon le contenu du fichier docker-compose.yml. Le paramètre -d est pour
lancer les conteneurs en mode détaché.
12. Puis, pour voir si les conteneurs son bien lancé, on va exécuter la commande suivante :
$ docker ps
Normalement, le résultat de la commande doit être comme suite :
13. Maintenant, on va créer une base de données dans la base de données influxdb :
$ docker exec -it weather-station-app-influxdb-1 influx
La commande docker exec permet d’exécuté une commande dans un conteneur spécifié par
son nom ou par son ID, ici on veut exécuter la commande influx dans le conteneur qui porte le
nom weather-station-app-influxdb-1. Ce nom est attribué automatiquement lors de la
création du conteneur (format du nom : nom-du-dossier-nom-service-nombre). Le résultat de
la commande doit être comme suivant :
14. Pour afficher la liste des bases de données dans influxdb on doit exécuter la
commande suivante :
> show databases
Le résultat de la commande est :
15. Maintenant nous allons créer une base de données nommé weather_station :
> create database weather_station
16. Dans Node-red on va créer un flow qui comporte deux nœuds ; un nœud MQTT est un
nœud influxdb out. Pour le nœud influxdb, on doit installer node-red-contrib-
influxdb.
Le Broker du nœud MQTT est l’adresse IP du Raspberry, le Topic est le même que celui
configuré dans la carte NodeMCU.
Pour le nœud influxdb, l’adresse IP du serveur est l’adresse du Raspberry, le nome de la base
de données est weather_station, et on va donner data comme nome du Measurement.
Après le déploiement du flux Node-Red, on peut se rendre dans la base de données influx
pour voir si on arrive à stocker les données :
20. On donne le nom de la base des données et on clique sur save & test pour tester la
connexion :
Si tous passe bien, vous aurai un message qui s’affiche en bas qui dit que Grafana a réussi à
trouver un measurement dans la base de données que vous avez spécifié.
21. Maintenant on va créer une Dashboard, on cliquer sur Dashboards
New Dashboard. puis cliquer sur Add panel. Puis dans la fenêtre
qui s’ouvre, on va sélectionnées la source des données, spécifier le
meseaurement, et les champs qu’on veut afficher, si tous passe bien,
les données seront affiché dans le graph en haut.
22. Refaire la même chose avec les autres champs, pour obtenir le résultat suivant :