Docker のコンテナに環境変数を渡す

Isaac Tony 2023年1月30日
  1. -e および -env タグを使用して、Docker のコンテナに環境変数を渡する
  2. Docker でコンテナに環境変数を渡すには Export コマンドを使用する
  3. Docker でコンテナに環境変数を渡すには -env ファイルを使用する
Docker のコンテナに環境変数を渡す

このチュートリアルでは、Docker のコンテナーに環境変数を渡す方法を紹介します。

-e および -env タグを使用して、Docker のコンテナに環境変数を渡する

まず、環境変数を作成してコンテナに渡す方法を見ていきます。以下のコマンドを使用して、Docker レジストリから使用するイメージをプルすることから始めます。

$ docker pull ubuntu~$ docker pull ubuntu

出力:

Using default tag: latest
latest: Pulling from library/ubuntu
08c01a0ec47e: Pull complete
Digest: sha256:669e010b58baf5beb2836b253c1fd5768333f0d1dbcb834f7c07a4dc93f474be
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

-env の省略形である -e タグを使用します。このタグの使用法は、ターミナルでコマンド docker run -help を実行することで確認できます。この引数により、コンテナに渡す環境変数の複数のキーと値のペアを作成できます。

単一の環境変数を作成し、Ubuntu イメージを使用して作成したコンテナーに渡す方法は次のとおりです。

$ docker run -it -e DEMO=sample_variable ubuntu bash

出力:

root@3a20bc21d3c8:/# echo $DEMO
sample_variable

以下に示すように、-e の複数のタグを使用して、新しいコンテナを作成するときに実行コマンドと一緒にそれらをチェーンするだけで、環境変数を作成することもできます。

$ docker run -it -e DEMO1=sample_variable1 -e DEMO2=sample_variable2 ubuntu bash

これらの 2つの環境変数を渡したら、以下のコマンドを使用してそれらの値にアクセスできます。変数 1 に DEMO1 という名前を付けました。以下でその値にアクセスできます。

root@9eee00d7ab01:/# echo $DEMO1

出力:

sample_variable1

同様に、ここに示すように、変数 2 を出力することもできます。

root@9eee00d7ab01:/# echo $DEMO2

出力:

sample_variable2

Docker でコンテナに環境変数を渡すには Export コマンドを使用する

または、export コマンドを使用して、環境変数の連鎖を回避することもできます。このコマンドは、WSL でも使用できる Linuxbash シェル用の組み込みユーティリティツールです。

これにより、既存の変数に影響を与えることなく、環境変数を作成して子プロセスに渡すことができます。以下に示すように、環境変数を作成することから始めます。

isaac@DESKTOP-HV44HT6:~$ export MYSQL_USER=isaactonyloi
isaac@DESKTOP-HV44HT6:~$ export MYSQL_PASS=fakepassword

環境変数を作成したら、次に示すように、作成中のコンテナーにそれらを渡すことができます。

$ docker run -it -e MYSQL_USER -e MYSQL_PASS ubuntu bash

次に、以下に示すように、コマンド echo コマンドを使用して、変数のそれぞれの値にアクセスして表示できます。

root@5b4dae06932d:/# echo $MYSQL_USER
isaactonyloi

Docker でコンテナに環境変数を渡すには -env ファイルを使用する

デバッグの余地を増やすためのより良いアプローチは、代わりに Docker 分解ファイルを使用することです。これは、Docker コンテナを起動するときに環境変数を直接渡す必要がないことを意味します。

この方法は、環境変数を含む外部の .env ファイルを作成する必要があることを意味します。以下の Linux コマンドを使用して、このファイルをホームディレクトリに作成できます。

このコマンドは Linuxvi エディターをオプトインし、環境変数リストを作成します。

$ vi env.list

vi エディター内で、大文字のキーと小さなケースのそれぞれの値を使用して、キーと値のペアとして環境変数を作成します。コロン全体を押して wq コマンドを入力することにより、変数を保存して終了します。

MYSQL_USER=isaactonyloi
MYSQL_PASS=fakepassword

wq

ls コマンドを使用して、ファイル env.list が正常に保存されたことを確認できます。これにより、そのディレクトリ内のファイルのリストが返され、リストされているファイルの中に env.list が含まれます。

以下に示すように、cat コマンドを使用して、そのリストのエントリを表示することもできます。

$ cat env.list

出力:

MYSQL_USER=isaactonyloi
MYSQL_PASS=fakepassword

これが整ったら、ubuntu イメージを実行して新しいコンテナーを作成し、変数を格納した場所へのパスを指定してそれらを渡すことができます。

この例では、env.list ファイルがホームディレクトリに保存されています。したがって、別のディレクトリ内にある場合は、パスが異なって見える可能性があります。

コマンドを実行して、これらの環境変数を新しいコンテナーに渡す必要があります。

$ docker run -it --env-file ./env.list ubuntu bash

以下に示すように変数を出力することで、環境変数がコンテナーに正常に渡されたことを確認できます。

/# echo $MYSQL_USER
/# echo $MYSQL_PASS

出力:

Isaactonyloi
fakepassword

以前の方法の代わりに、渡したいすべての環境変数を含むテンプレートファイルを作成できます。これにより、変更を加えたい場合に、このファイルで作成された環境変数を簡単にオーバーライドできます。

著者: Isaac Tony
Isaac Tony avatar Isaac Tony avatar

Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.

LinkedIn

関連記事 - Docker Environment Variable