Variables et configuration
Injecter de la configuration dans un container sans la hardcoder dans l'image est la base du déploiement portable. Docker offre plusieurs mécanismes, du plus simple au plus sécurisé. Le choix dépend de la sensibilité de la donnée.
ENV dans le Dockerfile
# Valeurs par défaut (remplacables au runtime)
ENV APP_ENV=production APP_PORT=8080 LOG_LEVEL=infoCes valeurs sont visibles dans docker inspect et dans les métadonnées de l'image. Ne jamais y mettre de secrets.
Injection au runtime
# Variable unique
docker run -e APP_ENV=staging myapp:latest
# Plusieurs variables
docker run -e APP_ENV=staging -e DB_HOST=postgres -e DB_PORT=5432 myapp:latest
# Depuis le fichier .env courant (sans valeur = reprend la valeur hôte)
docker run -e APP_ENV -e DB_HOST myapp:latestFichier de variables (--env-file)
# app.env
APP_ENV=staging
DB_HOST=postgres
DB_NAME=myapp
# Les lignes commentées sont ignorées
# DB_PASSWORD=secret # ne pas mettre les secrets ici non plusdocker run --env-file ./app.env myapp:latestLe fichier .env ne doit pas être commité dans Git. Ajouter *.env au .gitignore.
Secrets au runtime
Pour les données sensibles (mots de passe, tokens), plusieurs approches :
# Option 1 : fichier monté en lecture seule (bind mount)
docker run -v /run/secrets/db_password:/run/secrets/db_password:ro myapp:latest
# L'application lit le secret depuis le fichier# Option 2 : stdin (non stocké dans l'historique shell)
docker run -e DB_PASSWORD="$(cat /run/secrets/db_password)" myapp:latest# Option 3 : secrets Docker Swarm (voir section Swarm)
# Option 4 : Vault Agent Injector (Kubernetes/Vault)Configuration par fichier
# Injecter un fichier de configuration complet
docker run -d -v /srv/nginx/nginx.conf:/etc/nginx/nginx.conf:ro nginx:alpinePattern courant pour les applications qui lisent leur config depuis un fichier (nginx, prometheus, grafana) : monter le fichier en bind mount ou via ConfigMap (Kubernetes) / Config (Swarm).