6.1 Bases des variables d'environnement
Les variables d'environnement jouent un rôle important dans la configuration des applications, permettant de modifier dynamiquement le comportement et les paramètres des services sans changer le code. Docker Compose prend en charge l'utilisation de variables d'environnement pour configurer les conteneurs, offrant ainsi flexibilité et facilité de gestion de la configuration.
L'une des façons les plus pratiques de gérer les variables d'environnement est d'utiliser des fichiers .env. Dans cette conférence, nous allons examiner en détail comment utiliser les variables d'environnement dans Docker Compose, y compris la création et l'utilisation des fichiers .env.
Bases des variables d'environnement dans Docker Compose
Les variables d'environnement peuvent être utilisées dans le fichier compose.yaml pour paramétrer les configurations. Ces variables peuvent être définies dans un fichier .env, dans le fichier compose.yaml lui-même, ou transmises directement via la ligne de commande.
Exemple d'utilisation de variables d'environnement dans compose.yaml :
Dans cet exemple, les variables NGINX_VERSION et HOST_PORT sont utilisées, et leurs valeurs peuvent être spécifiées dans un fichier .env ou via la ligne de commande.
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
6.2 Utilisation des fichiers .env
1. Création d'un fichier .env
Le fichier .env est placé dans le même répertoire que compose.yaml et contient des paires "clé-valeur" qui définissent les variables d'environnement. Chaque variable est indiquée sur une nouvelle ligne.
Exemple de fichier .env :
NGINX_VERSION=latest
HOST_PORT=8080
DB_USER=admin
DB_PASSWORD=secret
2. Intégration du fichier .env avec Docker Compose
Docker Compose charge automatiquement les variables depuis le fichier .env s'il se trouve dans le même répertoire que compose.yaml.
Exemple de fichier compose.yaml utilisant des variables d'environnement :
Dans cet exemple, les variables NGINX_VERSION, HOST_PORT, DB_USER et DB_PASSWORD sont tirées du fichier .env.
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
db:
image: postgres:latest
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
6.3 Transmission des variables
Transmission des variables via la ligne de commande
Tu peux transmettre des variables d'environnement directement via la ligne de commande en utilisant la commande export dans les systèmes de type Unix ou avec le paramètre --env-file dans Docker Compose.
Exemple d'utilisation de export :
export NGINX_VERSION=latest
export HOST_PORT=8080
docker compose up
Exemple d'utilisation de --env-file :
Tu peux spécifier un fichier alternatif avec des variables d'environnement en utilisant le paramètre --env-file.
docker compose --env-file .env.dev up
Utilisation des variables d'environnement intégrées dans Docker Compose
Docker Compose supporte des variables d'environnement intégrées, comme ${PWD}, qui représentent le répertoire de travail actuel.
Exemple :
version: '3.8'
services:
app:
image: myapp:latest
volumes:
- ${PWD}/app:/app
6.4 Exemples pratiques
Exemples pratiques de l'utilisation des variables d'environnement :
Exemple 1 : Configuration d'un serveur web et d'une base de données
Crée un fichier .env avec des paramètres pour le serveur web et la base de données :
NGINX_VERSION=1.19.3
HOST_PORT=8080
DB_USER=myuser
DB_PASSWORD=mypassword
Crée un fichier compose.yaml qui utilise ces variables :
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
db:
image: postgres:latest
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:
Lance Docker Compose :
docker compose up
Exemple 2 : Séparation des environnements pour le développement et la production
Crée deux fichiers .env pour différents environnements : .env.dev et .env.prod.
Fichier .env.dev :
NGINX_VERSION=latest
HOST_PORT=8080
DB_USER=devuser
DB_PASSWORD=devpassword
Fichier .env.prod :
NGINX_VERSION=1.19.3
HOST_PORT=80
DB_USER=produser
DB_PASSWORD=prodpassword
Crée un fichier compose.yaml qui utilise les variables de ces fichiers :
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
db:
image: postgres:latest
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:
Lance Docker Compose pour le développement :
docker compose --env-file .env.dev up
Lance Docker Compose pour la production :
docker compose --env-file .env.prod up
GO TO FULL VERSION