Passer au contenu principal

Données et réseau (Docker)

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=info

Ces 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:latest

Fichier 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 plus
docker run --env-file ./app.env myapp:latest

Le 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:alpine

Pattern 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).