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