Contactez-nous

Passer des variables d'environnement (-e, --env-file)

Apprenez à utiliser les options -e et --env-file pour configurer vos conteneurs Docker avec des variables d'environnement. Découvrez les meilleures pratiques pour sécuriser et gérer vos configurations.

Introduction aux variables d'environnement dans Docker

Les variables d'environnement sont un mécanisme essentiel pour configurer les applications de manière flexible et sécurisée. Elles permettent de transmettre des informations dynamiques, comme des mots de passe, des clés API ou des paramètres de configuration, sans les inclure directement dans le code source. Dans Docker, les variables d'environnement jouent un rôle crucial pour personnaliser le comportement des conteneurs et adapter les applications à différents environnements (développement, test, production).

Grâce aux options `-e` et `--env-file`, Docker offre des moyens simples et efficaces de passer des variables d'environnement à vos conteneurs. Ces options permettent de définir des variables directement dans la ligne de commande ou via un fichier dédié, offrant ainsi une flexibilité maximale pour gérer vos configurations. Dans cette section, nous explorerons en détail ces deux approches, leurs cas d'utilisation, et les meilleures pratiques pour garantir la sécurité et la portabilité de vos conteneurs.

Utilisation de l'option -e : Définir des variables en ligne de commande

L'option `-e` permet de définir des variables d'environnement directement dans la ligne de commande lors de l'exécution d'un conteneur. Cette méthode est idéale pour passer rapidement des paramètres spécifiques ou tester des configurations. Par exemple :```bashdocker run -e NOM_UTILISATEUR=admin -e MOT_DE_PASSE=secret myapp```Dans cet exemple, deux variables d'environnement (`NOM_UTILISATEUR` et `MOT_DE_PASSE`) sont définies et accessibles par l'application exécutée dans le conteneur.

Les variables définies avec `-e` sont disponibles uniquement pendant l'exécution du conteneur et n'affectent pas l'image Docker elle-même. Cela garantit que les configurations sensibles ne sont pas intégrées de manière permanente dans l'image, réduisant ainsi les risques de fuite d'informations.

Pour vérifier les variables d'environnement définies dans un conteneur, vous pouvez utiliser la commande suivante :```bashdocker exec env```Cette commande affiche toutes les variables d'environnement disponibles dans le conteneur, y compris celles définies avec `-e`.

Utilisation de l'option --env-file : Charger des variables depuis un fichier

L'option `--env-file` permet de charger un ensemble de variables d'environnement à partir d'un fichier texte. Cette méthode est particulièrement utile pour gérer des configurations complexes ou pour éviter de passer de nombreuses variables directement dans la ligne de commande. Par exemple, créez un fichier `.env` contenant :```NOM_UTILISATEUR=adminMOT_DE_PASSE=secretURL_BASE=https://example.com```Ensuite, exécutez le conteneur en spécifiant ce fichier :```bashdocker run --env-file .env myapp```

Le fichier `.env` doit respecter un format simple : chaque ligne contient une paire clé-valeur, sans espaces autour du signe `=`. Les lignes vides ou celles commençant par `#` sont ignorées, ce qui permet d'ajouter des commentaires pour documenter les variables.

Cette approche facilite la gestion des configurations dans des environnements collaboratifs ou automatisés, comme les pipelines CI/CD. En stockant les variables dans un fichier séparé, vous pouvez facilement les versionner, les partager ou les modifier sans affecter directement les scripts ou les commandes Docker.

Meilleures pratiques pour la gestion des variables d'environnement

### Sécurisez vos variables sensiblesLes variables contenant des informations sensibles, comme des mots de passe ou des clés API, ne doivent jamais être incluses directement dans le code source ou les fichiers versionnés. Utilisez des outils comme Docker Secrets, HashiCorp Vault ou AWS Secrets Manager pour gérer ces informations de manière sécurisée.

### Utilisez des fichiers `.env` spécifiques par environnementPour simplifier la gestion des configurations, créez des fichiers `.env` distincts pour chaque environnement (développement, test, production). Par exemple : `.env.dev`, `.env.test`, `.env.prod`. Chargez le fichier approprié lors de l'exécution du conteneur :```bashdocker run --env-file .env.prod myapp```

### Evitez d'exposer les variables dans les logsLorsque vous exécutez des conteneurs, évitez d'inclure des variables sensibles dans les logs ou les commandes visibles. Par exemple, préférez utiliser des fichiers `.env` ou des outils de gestion de secrets plutôt que de passer des variables directement dans la ligne de commande.

Exemples pratiques

### Exemple 1 : Configurer une base de donnéesPour connecter une application à une base de données, vous pouvez définir les variables suivantes dans un fichier `.env` :```DB_HOST=localhostDB_PORT=5432DB_USER=adminDB_PASSWORD=secret```Ensuite, exécutez le conteneur avec :```bashdocker run --env-file .env myapp```

### Exemple 2 : Passer des variables dynamiquesVous pouvez combiner des variables d'environnement définies dans un fichier avec celles passées directement dans la ligne de commande :```bashdocker run --env-file .env -e DEBUG=true myapp```Dans cet exemple, la variable `DEBUG` est ajoutée en complément de celles définies dans le fichier `.env`.

### Exemple 3 : Utiliser des variables systèmeDocker permet également d'utiliser des variables système dans vos conteneurs. Par exemple :```bashdocker run -e NOM_UTILISATEUR=$USER myapp```Ici, la variable système `$USER` est transmise au conteneur sous la forme de `NOM_UTILISATEUR`.

Résolution des problèmes courants

### Les variables ne sont pas reconnues dans le conteneurAssurez-vous que les variables sont correctement définies dans le fichier `.env` et que le fichier est spécifié avec l'option `--env-file`. Vérifiez également que le format du fichier respecte les règles (pas d'espaces autour du `=`).

### Conflits entre variablesSi une variable est définie à la fois dans un fichier `.env` et dans la ligne de commande avec `-e`, la valeur passée en ligne de commande a priorité. Par exemple :```bashdocker run --env-file .env -e NOM_UTILISATEUR=override myapp```Dans ce cas, la valeur `override` sera utilisée pour `NOM_UTILISATEUR`.

### Fichier `.env` introuvableSi Docker ne trouve pas le fichier `.env`, vérifiez que le chemin est correct et que le fichier est accessible. Vous pouvez spécifier un chemin absolu si nécessaire :```bashdocker run --env-file /chemin/vers/.env myapp```