3.02 Passer des informations Les variables d'environnement
Objectifs pédagogiques
- Comprendre les variables d'environnement d'un process
- Savoir utiliser la directive ENV dans un Dockerfile
- Savoir passer des variables d'environnement à un conteneur
Les variables d'environnement
Analogie : Une commande de restauration à livrer.
La fiche du client affiche des informations qui lui sont spécifiques.
Par exemple son adresse, pas d'anchois dans les pizzas, intolérance au Gluten. Pour une même commande, le résultat sera différent car le contexte est différent.
Les variables d'environnement UNIX sont des variables dont les valeurs sont définies en dehors du code d'une application.
Les variables d'environnement sont constituées de paires de noms et de valeurs, et vous pouvez en créer autant que vous le souhaitez pour qu'elles soient disponibles à titre de référence à un moment donné.
Tout process a généralement des variables d'environnement.
$ env
$ sudo cat /proc/self/environ | tr "\0" "\n"
Avancé : En remplaçant self
par un pid
vous pouvez voir les variables d'environnement de tout process.
Les variables d'environnement sont des variables "shell", elles ont toujours la forme
$ VAR=<value>
On les crée avec la commande shell export
et la commande env
sert à les afficher et les gérer.
$ env -i sh -c "env"
$ env -i sh -c "export VAR=VALUE; printenv"
Les variables d'environnement sont une façon recommandée de configurer vos applications Docker.
Elles permettent une configuration "au runtime".
Instruction ENV
ENV <key>=<value> <key2>=<value2>
ENV <key> <value>
*On peut utiliser des variables d'environnement dans les Dockerfiles. La syntaxe est ${...}
.
Exemple :
FROM busybox
ENV DEST=/opt
WORKDIR ${DEST} # WORKDIR /opt
ADD . $DEST # ADD . /opt
COPY \$DEST /srv # COPY $DEST /srv
C'est un bon moyen de définir une seule fois une information redondante dans le Dockerfile (ex: un tag).
Se référer au mode d'emploi pour la logique plus précise de fonctionnement des variables.
En ligne de commande
On peut également définir les variables d'environnement en ligne de commande.
$ docker run --env VAR=VALUE ubuntu env
Impact sur le code
Une fois admis qu'il faut utiliser des variables d'environnement pour configurer un service, il faut l'intégrer aux applications.
Absolument tous les langages de programmation offrent des moyens très simples de lire ces variables.
En PHP, vous pouvez accéder aux variables d'environnement à l'aide de la fonction getenv().
$maVar = getenv('MA_VAR');
En Python, vous pouvez accéder aux variables d'environnement à l'aide du module os.
import os
maVar = os.environ.get('MA_VAR')
En Java, vous pouvez accéder aux variables d'environnement à l'aide de la classe System.
String myVar = System.getenv("MY_VAR");
Dans Node.js, vous pouvez accéder aux variables d'environnement à l'aide de l'objet process.env.
const myVar = process.env.MY_VAR;