Leçon 23 : Gestion des Variables d'Environnement et des Secrets
Les applications s'appuient sur la configuration, souvent transmise via des variables d'environnement (identifiants de base de données, clés API). Docker fournit plusieurs façons de les gérer.
1. Définir des Variables dans le Dockerfile (ENV)
Utilisez ENV pour définir des variables d'environnement statiques à l'intérieur de l'image.
dockerfile ENV APP_VERSION=1.0.0 ENV PORT=8080
2. Passage de Variables à l'Exécution (docker run)
Pour les données sensibles ou dynamiques (comme les mots de passe), ne les codez jamais en dur dans le Dockerfile. Transmettez-les à l'exécution en utilisant le drapeau -e.
bash docker run -d \n -e DB_USER=production_user \n -e DB_PASS=supersecret! \n my-app:latest
3. Utilisation d'un Fichier d'Environnement (--env-file)
Pour de nombreuses variables, les lister toutes avec -e est fastidieux. Vous pouvez utiliser un fichier .env.
Contenu du fichier prod.env :
ini DB_USER=prod_user API_KEY=xyz123abc
Commande d'exécution :
bash docker run -d --env-file ./prod.env my-app:latest
4. Gestion de l'Environnement avec Compose
Docker Compose simplifie cela en utilisant le bloc environment: (Leçon 18) ou des fichiers .env externes.
Si vous avez un fichier .env externe dans le même répertoire que votre compose.yml, Compose le charge automatiquement et substitue les variables définies dans votre compose.yml :
Extrait de compose.yml :
yaml services: web: image: my-app:latest environment: DB_USER: ${DB_USER} # Ou coder en dur une variable uniquement pour ce service LOG_LEVEL: info
Note de Sécurité sur les Secrets : Pour une véritable sécurité en production (c'est-à-dire lors de l'utilisation de Swarm ou Kubernetes), les variables d'environnement ne sont pas considérées comme totalement sécurisées. Docker fournit une gestion dédiée des Secrets (stockage chiffré), que nous mentionnerons brièvement dans les leçons ultérieures sur l'orchestration.