Étant nouveau dans python & docker, j'ai créé une petite application flask (test.py) qui a deux valeurs codées en dur:
username = "test"
password = "12345"
Je peux créer une image Docker et exécuter un conteneur à partir du Dockerfile suivant:
FROM python:3.6
RUN mkdir /code
WORKDIR /code
ADD . /code/
RUN pip install -r requirements.txt
EXPOSE 5000
CMD ["python", "/code/test.py"]`
Comment puis-je créer une variable ENV pour le nom d'utilisateur et le mot de passe et transmettre des valeurs dynamiques lors de l'exécution de conteneurs?
Dans votre code python vous pouvez lire des variables env comme:
import os
username = os.environ['MY_USER']
password = os.environ['MY_PASS']
print("Running with user: %s" % username)
Ensuite, lorsque vous exécutez votre conteneur, vous pouvez définir ces variables:
docker run -e MY_USER=test -e MY_PASS=12345 ... <image-name> ...
Cela définira la variable env dans le conteneur et celles-ci seront lues ultérieurement par le script python (test.py
)
Plus d'informations sur os.environ et docker env
Dans votre code Python vous pouvez faire quelque chose comme ceci:
# USERNAME = os.getenv('NAME_OF_ENV_VARIABLE','default_value_if_no_env_var_is_set')
USERNAME = os.getenv('USERNAME', 'test')
Ensuite, vous pouvez créer un fichier docker-compose.yml pour exécuter votre dockerfile avec:
version: '2'
services:
python-container:
image: python-image:latest
environment:
- USERNAME=test
- PASSWORD=12345
Vous exécuterez le fichier de composition avec:
$ docker-compose up
Tout ce dont vous devez vous souvenir est de créer votre dockerfile que vous avez mentionné dans votre question avec:
$ docker build -t python-image .
Faites-moi savoir si cela vous a été utile. J'espère que cela répond à votre question.