\newpage Premières étapes ================ Dans un premier temps, nous allons créer une image Docker comme si l'on réalisait une installation sur une machine classique : en suivant une recette. La machine (notre première image Docker) contiendra tout le nécessaire pour faire fonctionner notre service. ## Les caches Nous avons vu que chaque instruction de notre `Dockerfile` génère une couche. Chaque couche sert de cache d'une construction de conteneur à l'autre. Ainsi, lorsque vous modifiez une instruction dans votre `Dockerfile`, les instructions précédentes ne sont pas réexécutées mais sont ressorties du cache. Le cache se base principalement sur le contenu de chaque instruction dans le `Dockerfile` (pour les `COPY` et `ADD`, il va aussi regarder la date de dernière modification de fichier copié ou ajouté). Donc tant qu'une instruction n'est pas modifiée dans le `Dockerfile`, le cache sera utilisé. Il est possible de ne pas utiliser le cache et de relancer toutes les étapes du `Dockerfile` en ajoutant l'option `--no-cache` au moment du `docker build`. Les couches du cache peuvent être partagées entre plusieurs conteneur, c'est ainsi que vous pouvez partager facilement une plus grosse partie du système de fichiers. \vspace{1.5em} Pour profiter du cache, il faut donc placer les étapes les plus génériques (qui seraient susceptibles d'apparaître dans plusieurs conteneur), en haut du `Dockerfile`. Commençons donc notre `Dockerfile` : choisissez une image de base pour votre `FROM`, et indiquez votre nom avec l'instruction `MAINTAINER`, pour indiquez que c'est vous qui maintenez ce conteneur (si d'autres gens ont besoin de vous avertir pour le mettre à jour par exemple). ## `RUN` ou script ? ### InfluxDB Ensuite vient l'installation d'InfluxDB. Le paquet n'est pas disponible dans les dépôts. La [https://docs.influxdata.com/influxdb/v1.0/introduction/installation/#ubuntu-debian](procédure décrite sur le site) incite à télécharger le paquet mis à disposition puis à l'installer via `dpkg -i`. Deux solutions s'offrent à nous : * télécharger le paquet hors du conteneur, le copier, puis l'installer. * faire un `RUN` avec toutes ces opérations (sans oublier l'installation préalable de `wget`/`curl`). La copie étant définitive (supprimer le fichier ne le supprimera pas des couches où il a pu exister), on préférera la seconde méthode, malgré que `wget` restera en déchet. La première méthode aura plus sa place dans un dépôt où les binaires auront été préalablement compilés, il ne restera plus qu'à les copier dans le conteneur au bon emplacement. Écrivons une commande `RUN` qui va télécharger la dernière version d'InfluxDB, qui va l'installer et supprimer le fichier. \vspace{1em} À ce stade, nous pouvons déjà terminer le conteneur et tester qu'InfluxDB est bien utilisable : `EXPOSE`, `CMD`, ... Il est possible que vous ayez à écraser le fichier de configuration via un `COPY` (ou de manière plus maligne en utilisant `--volume` au moment du `docker run`, cela fonctionne pas qu'avec les dossiers). Ou peut-être ferez-vous un `ENTRYPOINT` ? ### Telegraf Telegraf est un programme qui permet de collecter des métriques systèmes. Il travaille de paire avec InfluxDB pour stocker les valeurs. Vous pouvez monitorer les métriques de n'importe quelle machine, simplement en installant *Telegraf* et en lui indiquant l'emplacement de son serveur InfluxDB. Nous allons installer *telegraf* sur notre machine à l'aide de la [https://docs.influxdata.com/telegraf/v1.0/introduction/installation/](documentation). Ces quelques lignes devraient suffir à lancer la collecte, à condition que votre InfluxDB écoute sur le port 8086 local : ```bash TELEGRAF_VERSION=1.0.0 wget https://dl.influxdata.com/telegraf/releases/telegraf-${TELEGRAF_VERSION}_linux_amd64.tar.gz tar xf telegraf-${TELEGRAF_VERSION}_linux_amd64.tar.gz TELEGRAF_CONFIG_PATH=./telegraf/etc/telegraf/telegraf.conf ./telegraf/usr/bin/telegraf ``` Rendez-vous ensuite dans [http://localhost:8083/](l'interface d'InfluxDB) pour voir si la collecte se passe bien. Dans l'interface sélectionnez la base *telegraf* puis explorez les valeurs : ```sql SHOW MEASUREMENTS SHOW FIELD KEYS SELECT usage_idle FROM cpu WHERE cpu = 'cpu-total' ORDER BY time DESC LIMIT 5 ``` Laissons tourner `telegraf` afin de constituer un petit historique de valeurs. ## Rendu Avant de passer à la suite, placez votre `Dockerfile` dans un dossier `influxdb` (pour le moment il ne contient rien d'autre !).