この記事は
指定した環境変数をPythonプログラム上で使用する方法です。
環境変数のおさらい
以下のようなPythonプログラムがあるとします。
単に、環境変数を取得して表示しているだけです。
import os
value = os.environ["value"]
print(value)
特に何もせずにpython main.py
を実行すると、結果はNone
になります(指定した環境変数が取得できなかった)。これは想定通りです。
$ python main.py
None
環境変数を定義してから再度同じプログラムを実行させます。設定された値が表示されることがわかります。
$ export value=1234
$ python main.py
1234 # 設定した値が表示された!
Dockerで同じことをする
2つの方法があります。
- ENVに固定値を設定する
- ARGを設定し、ENVでARGに設定した値を設定する。
順に見ていきます。
ENVに固定値を設定する
以下のようなDockerfileを作成します。この時、ENV=1234
として、変数を指定します。これがプログラム上から読み込むことのできる変数です。
FROM python:3.9
COPY . .
ENV value=1234
ENTRYPOINT ["python", "main.py"]
pythonコード(再掲)
import os
value = os.environ["value"]
print(value)
Dockerfile
とmain.py
があるディレクトリで以下のようにDockerのビルドと起動をします。想定通り指定したENVの値が表示されます。
$ docker build -t sample_docker .
$ docker run sample_docker
1234
ARGを設定し、それをENVで読み込む
次に、ARGを設定する方法です。
以下のように、DockerfileにARGで値を設定し、設定したARGをさらにENVに指定しています。
この時、ARG VALUE=default
は、--build-arg
(後述)で値が別に指定されなかった場合のデフォルト値を指定していることを意味しています。
FROM python:3.9
COPY . .
ARG VALUE=default
ENV value=${VALUE}
ENTRYPOINT [ "python", "main.py" ]
この状態で、先ほどと同様にビルドと実行をします。
$ docker build -t sample_docker .
$ docker run sample_docker
default
ARGで設定したdefault
という文字列が出力されるのがわかります。
次に、build-arg
を用いてARGの値を上書きしてみます。
$ docker build -t sample_docker . --build-arg VALUE=my_value
$ docker run sample_docker
my_value
想定通り、my_value
を表示できました。