当サイトは、アフィリエイト広告を利用しています
Dockerを使ったコンテナ作成時に環境変数を設定する方法を
調べたのでまとめる。
コンテナに環境変数を設定する方法は大きく
の2種類がある。
それぞれで違いあるので用途によって使い分ける必要がある。
Dockerfileで設定した場合は
イメージのbuild時に環境変数が設定されるため
そのイメージを使ってコンテナを作った場合
環境変数がすべて同じになる
なので
場合はDockerfileで設定する
docker-compose.ymlで設定した場合はコンテナ実行時に
環境変数が設定されるため
同じイメージを使用していてもコンテナごとに環境変数を変えることができる
なので
場合はdocker-compose.ymlで設定する
Dockerfileとdocker-compose.ymlの両方で設定した場合は
実行時に設定される方が優先されるため
同じ環境変数がある場合はdocker-compose.ymlの方で上書きされる
dockerfileでコンテナに環境変数を指定する場合は
「ENV」を使用する
FROM python:3.10# 環境変数を設定ENV FLASK_ENV=developmentENV FLASK_DEBUG=true# /workspaceディレクトリを作成RUN mkdir -p /workspace# /workspaceディレクトリに移動WORKDIR /workspace
ENVを使用すると、その環境変数はイメージのビルド時に設定され、
ビルドされたイメージを実行するコンテナ内で利用可能になる。
イメージで実行されているため、このイメージから作成される
すべてのコンテナで設定した環境変数が使用可能になる
ちなみに下記のように書くことも可能。
ENV FLASK_ENV=development FLASK_DEBUG=true
ただ個人的には見づらいので行を分けた方がいいと思う。
docker-compose.ymlでコンテナに環境変数を設定する場合は
方法は
の2つがある
environmentで環境変数を設定できる
version: "3"services:python3:container_name: "container_python3"image: python:3.10environment:- FLASK_ENV=development- FLASK_DEBUG=truevolumes:- .:/workspacetty: true
環境変数が少ない場合はこちらでサクッと設定してしまう方がいいかもしれない。
env_fileセクションを使う場合は.envファイルを用意する必要がある
FLASK_ENV=developmentFLASK_DEBUG=true
env_fileセクションで.envを読み込む
version: "3"services:python3:container_name: "container_python3"image: python:3.10env_file:- .envvolumes:- .:/workspacetty: true
別の階層に.envがある場合は下記のように相対パスを設定する必要がある
env_file:- ./docker/.env # .env ファイルの相対パス
複数の環境変数を扱う場合は、.envファイルで外出ししておいたほうが
管理しやすい
それぞれのパターンでコンテナを作って確認してみる
下記の構成で確認する
.|-- .env|-- Dockerfile`-- docker-compose.yml
Dockerfileを使ってコンテナの環境変数を設定する方法を試す。
下記ファイルを編集する
FROM python:3.10# 環境変数を設定ENV FLASK_ENV=developmentENV FLASK_DEBUG=true# /workspaceディレクトリを作成RUN mkdir -p /workspace# /workspaceディレクトリに移動WORKDIR /workspace
ENVで環境変数を設定
version: "3"services:python3:container_name: "container_python3"build:context: .dockerfile: Dockerfile# environment:# - FLASK_ENV=development# - FLASK_DEBUG=truevolumes:- .:/workspacetty: true
docker-compose実行時にDockerfileをbuildしてimageを作るようにする
enviromentはコメントアウトしておく
# コンテナ作成$ docker compose up -d --build# コンテナ作成確認$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES46a3a27be814 docker-env-python3 "python3" 19 seconds ago Up 18 seconds container_python3# コンテナにログイン$ docker exec -it container_python3 bash# 環境変数確認root@46a3a27be814:/workspace# echo $FLASK_ENVdevelopmentroot@46a3a27be814:/workspace# echo $FLASK_DEBUGtrue
Dockerfileで設定した環境変数が設定されている
docker-compose.ymlを使ってコンテナの環境変数を設定する方法を試す。
下記ファイルを編集する
version: "3"services:python3:container_name: "container_python3"image: python:3.10environment:- FLASK_ENV=development- FLASK_DEBUG=truevolumes:- .:/workspacetty: true
enviromentで環境変数を設定 ※イメージはpython:3.10を使用するため、Dockerfileは使わない
# コンテナ作成$ docker compose up -d --build# コンテナ作成確認$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES4dfd182774b0 python:3.10 "python3" 15 seconds ago Up 14 seconds container_python3# コンテナにログイン$ docker exec -it container_python3 bash# 環境変数確認root@4dfd182774b0:/# echo $FLASK_ENVdevelopmentroot@4dfd182774b0:/# echo $FLASK_DEBUGtrue
docker-compose.ymlで設定した環境変数が設定されている
最後に両方で設定してみる
下記のファイルを編集する
FROM python:3.10# 環境変数を設定ENV FLASK_ENV=developmentENV FLASK_DEBUG=true# /workspaceディレクトリを作成RUN mkdir -p /workspace# /workspaceディレクトリに移動WORKDIR /workspace
ENVで環境変数を設定
version: "3"services:python3:container_name: "container_python3"build:context: .dockerfile: Dockerfileenvironment:- FLASK_DEBUG=falsevolumes:- .:/workspacetty: true
enviromentでDockerfileと同じ環境変数「FLASK_DEBUG」を指定する
# コンテナ作成$ docker compose up -d --build# コンテナ確認$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES4b5ee103c38e docker-env-python3 "python3" 38 seconds ago Up 34 seconds container_python3# コンテナログイン$ docker exec -it container_python3 bash# 環境変数確認root@4b5ee103c38e:/workspace# echo $FLASK_ENVdevelopmentroot@4b5ee103c38e:/workspace# echo $FLASK_DEBUGfalse
FLASK_DEBUGはdocker-compose.ymlで設定したもので上書きされている
Dockerfileとdocker-compose.ymlのそれぞれでコンテナの
環境変数を設定する方法をまとめた。
それぞれで使い分ける必要があるので
上手く利用していきたい。