Corredor

ウェブ、プログラミングの勉強メモ。

外部から Docker コンテナに環境変数を注入する方法

Docker コンテナ内で使用する環境変数を、Docker コンテナ起動時に注入する方法。

DockerfileENV 命令だと切り替えが難しい

Docker コンテナ内で使用する環境変数をどう定義するか、というと、まず思いつくのは DockerfileENV 命令だ。

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

--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 オプションで読み込ませて動作させる

みたいに切り替えられるだろう。

Dockerによるアプリケーション開発環境構築ガイド

Dockerによるアプリケーション開発環境構築ガイド