外部から Docker コンテナに環境変数を注入する方法
Docker コンテナ内で使用する環境変数を、Docker コンテナ起動時に注入する方法。
目次
Dockerfile
の ENV
命令だと切り替えが難しい
Docker コンテナ内で使用する環境変数をどう定義するか、というと、まず思いつくのは Dockerfile
の ENV
命令だ。
FROM centos
# 環境変数を設定する
ENV MY_ENV Hello
# Docker ビルド中に環境変数を参照する
RUN env
# Docker コンテナ起動時に環境変数を出力させてみる
CMD ["env"]
確かにコレでも環境変数を定義できるが、異なる環境変数を設定したくなった時は Docker イメージのビルドからやり直す必要がある。環境変数しか違いがないのに Docker イメージをまるっと作り直すのは、思わぬ差分を含めてしまうリスクがあるので避けたい。
-e
(--env
) オプション
そこで登場するのが -e
(--env
) オプション。docker run
のタイミングでオプション引数として渡せるのだ。
# -e オプションで環境変数を設定しながらコンテナを起動
$ docker run -e MY_ENV=Hello -it my-container bash
# コンテナ内で環境変数が確認できる
$$ echo $MY_ENV
- 参考 : dockerのコンテナ実行時にLANGなどの環境変数を設定する方法 - Qiita
- 参考 : Docker コンテナの動作に必要な設定を起動時に渡す - CUBE SUGAR CONTAINER
--env-file
オプションで一括設定
さらに便利な --env-file
オプションというモノもある。コチラは以下のような、いわゆる「Dot Env (.env
)」ファイルの形式で用意した環境変数を一括で設定してくれるのだ。
my-docker-env.txt
MY_ENV=Hello
MY_ANOTHER_ENV=GoodBye
コレを以下のように読み込ませて使う。
$ docker run --env-file=./my-docker-env.txt -it my-container bash
コレを使えば、
- ローカル開発中は npm パッケージの
dotenv
みたいなヤツを使って環境変数を設定して動作確認し、 - Docker ビルド後はコンテナ起動時に
--env-file
オプションで読み込ませて動作させる
みたいに切り替えられるだろう。