Publier l'application Compose avec variables d'environnement
Dans cette étape, nous allons apprendre à intégrer des variables d'environnement dans notre application Docker Compose et comment cela affecte la publication. Les variables d'environnement sont une méthode courante pour configurer des applications, et Docker Compose offre plusieurs moyens de les gérer.
D'abord, arrêtons le conteneur Nginx en cours d'exécution depuis l'étape précédente. Naviguez vers le répertoire ~/project
si vous n'y êtes pas déjà.
cd ~/project
Arrêtez les services en cours d'exécution avec la commande docker-compose down
.
docker-compose down
Maintenant, modifions notre fichier docker-compose.yaml
pour utiliser une variable d'environnement. Nous allons ajouter une simple variable d'environnement au service web
. Ouvrez le fichier docker-compose.yaml
dans le répertoire ~/project
avec nano
.
nano ~/project/docker-compose.yaml
Ajoutez une section environment
à la définition du service web
. Nous ajouterons une variable nommée MY_VARIABLE
avec une valeur.
version: "3.8"
services:
web:
image: nginx@sha256:your_image_digest_here ## Remplacez par votre vrai digeste
ports:
- "80:80"
environment:
- MY_VARIABLE=HelloFromCompose
N'oubliez pas de remplacer your_image_digest_here
par le véritable digeste d'image obtenu à l'étape précédente.
Enregistrez le fichier avec Ctrl + S
et quittez l'éditeur avec Ctrl + X
.
Désormais, lorsque vous démarrez l'application avec docker-compose up
, la variable d'environnement MY_VARIABLE
sera définie dans le conteneur Nginx.
docker-compose up -d
Pour vérifier que la variable d'environnement est bien définie dans le conteneur, nous pouvons exécuter une commande à l'intérieur du conteneur en cours d'exécution avec docker exec
. D'abord, trouvez l'ID du conteneur avec docker ps
.
docker ps
Notez l'ID du conteneur Nginx en cours d'exécution. Puis, utilisez docker exec
pour exécuter la commande printenv
dans le conteneur et filtrer le résultat pour MY_VARIABLE
.
docker exec < container_id > printenv | grep MY_VARIABLE
Remplacez <container_id>
par l'ID réel de votre conteneur Nginx en cours d'exécution. Vous devriez voir un résultat similaire à MY_VARIABLE=HelloFromCompose
.
Lors de la publication d'une application Compose utilisant des variables d'environnement, vous devez considérer comment ces variables seront fournies dans l'environnement cible.
Une approche courante consiste à utiliser un fichier .env
. Docker Compose recherche automatiquement un fichier nommé .env
dans le répertoire où se trouve le fichier docker-compose.yaml
. Vous pouvez définir des variables d'environnement dans ce fichier, et Compose les chargera.
Créons un fichier .env
dans le répertoire ~/project
.
nano ~/project/.env
Ajoutez le contenu suivant au fichier .env
:
ANOTHER_VARIABLE=ThisIsFromDotEnv
Enregistrez le fichier et quittez nano
.
Maintenant, modifions le fichier docker-compose.yaml
pour utiliser cette nouvelle variable d'environnement. Ouvrez à nouveau le fichier docker-compose.yaml
.
nano ~/project/docker-compose.yaml
Ajoutez ANOTHER_VARIABLE
à la section environment
.
version: "3.8"
services:
web:
image: nginx@sha256:your_image_digest_here ## Remplacez par votre vrai digeste
ports:
- "80:80"
environment:
- MY_VARIABLE=HelloFromCompose
- ANOTHER_VARIABLE
Notez que pour ANOTHER_VARIABLE
, nous avons simplement listé le nom de la variable. Compose cherchera cette variable dans l'environnement où docker-compose up
est exécuté, y compris les variables chargées depuis le fichier .env
.
Enregistrez le fichier et quittez nano
.
Maintenant, arrêtez et redémarrez l'application Compose pour prendre en compte les modifications.
docker-compose down
docker-compose up -d
Obtenez le nouvel ID de conteneur avec docker ps
.
docker ps
Maintenant, utilisez docker exec
pour vérifier les deux variables d'environnement dans le conteneur.
docker exec < container_id > printenv | grep MY_VARIABLE
docker exec < container_id > printenv | grep ANOTHER_VARIABLE
Remplacez <container_id>
par le nouvel ID de conteneur. Vous devriez voir à la fois MY_VARIABLE=HelloFromCompose
et ANOTHER_VARIABLE=ThisIsFromDotEnv
dans le résultat.
Lors de la publication, vous partageriez typiquement le fichier docker-compose.yaml
et fourniriez des instructions sur comment définir les variables d'environnement nécessaires, soit via un fichier .env
, soit en les définissant directement dans l'environnement où Compose est exécuté. Les informations sensibles ne devraient pas être codées en dur dans les fichiers docker-compose.yaml
ou .env
et devraient être gérées avec des solutions de gestion de secrets.