ホストからDockerコンテナに環境変数を渡すことができることをご存知ですか?この機能を使うことで、コンテナの開発効率が上がります。しかし、その仕組みに入る前に、まず「環境変数とは何か?」という点について理解しておく必要があります。
参照: 学ぶべき最高のプログラミング言語と最悪のプログラミング言語 (TechRepublic Premium)
環境変数とは、動的に名前が付けられる値で、保存後、サービス、アプリケーション、またはスクリプトに渡すことができます。これは、値を一元的な場所(通常はメモリ内)に保存し、グローバルに使用するための簡単な方法です。環境変数について詳しくは、「Linux 101:環境変数とは?」をご覧ください。
こうした変数は、非常に便利なツールとして、常に手元に置いておくことができます。コンテナ開発者であれば、これらの変数を活用することで作業が少し楽になるかもしれません。
やり方をお見せしましょう。
必要なもの
Dockerコンテナに環境変数を渡すために必要なのは、実行中のDockerインスタンスとdockerグループに所属するユーザーだけです。これで完了です。いくつか変数を渡してみましょう。
環境変数を設定する方法
コンテナに環境変数を渡すには、まず環境変数を設定する必要があります。ここではLinuxで説明します。コンテナ開発に別のオペレーティングシステムを使用している場合は、お使いのプラットフォームで同じ設定を行う方法を確認してください。
データベースユーザーの変数を設定し、その変数を複数のコンテナで使用したいとします。DB_USERという変数を設定すれば、あらゆるタイプのデータベースを使用するあらゆるコンテナで使用できます。DB_USERの値はTechRepublicとします。この変数を設定するには、次のコマンドを実行します。
export DB_USER=TechRepublic
変数が設定されていることを確認するには、次のコマンドを発行します。
echo $DB_USER
ターミナルに「TechRepublic」と表示されているはずです。これで変数の設定は完了です。さらに一歩進んで(例として)、パスワードを環境変数として設定してみましょう。本番環境ではこのような設定は行いませんが、仕組みを理解するには良い方法です。パスワード用の環境変数を設定するには、次のコマンドを実行します。
export DB_PWORD=T3chR3public
変数をコンテナに渡す方法
環境変数の仕組みがわかったので、コンテナに簡単に渡す方法もお分かりいただけたかと思います。まずはDockerコマンドラインから、次に.envファイルを使って設定する方法を説明します。
Linuxの環境変数とは異なり、ホスト側で環境変数を設定し、それをホストシステム内と同じようにコンテナに渡すことはできません。つまり、Dockerコマンドで設定した変数を、以下のようにコンテナに渡すことはできません。
docker run --name postgresql -e $DB_PWORD -e $DB_USER -d postgres
コンテナをそのままデプロイしようとすると、実行はされますがすぐに終了します。なぜでしょうか?Linuxシステムでは環境変数をほぼ自由に定義できますが、コンテナイメージでは特定の変数が想定されているためです。例えば、PostgreSQLデータベースはPOSTGRES_PASSWORDとPOSTGRES_USERを想定しているため、DB_PWORDやDB_USERは使用できません。そのため、以下のコマンドでLinuxホスト上でこれらの環境変数を設定できます。
export POSTGRES_PASSWORD=t3chr3public
export POSTGRES_USER=TechRepublic
さて、同じコマンドを次のように実行します。
docker run --name postgresql -e POSTGRES_PASSWORD -e POSTGRES_USER -d postgres
コマンドは成功し、コンテナは実行を継続します。コンテナ内のPostgreSQLコンソールにアクセスしてテストするには、次のコマンドを実行します。
docker exec -it postgresql psql -U $POSTGRES_USER
コンテナ内の PostgreSQL コンソールが表示されているはずです。
.envファイルで変数を渡す方法
前述のように環境変数を渡す際の問題点の一つは、環境変数がメモリ上に保持され続けることです(unsetコマンドで設定を解除するまで)。これを回避するには、環境変数ファイルを使用します。
上記と同じ変数を使いましょう。以下のコマンドで新しい.envファイルを作成します。
nano .env
そのファイルに次の内容を貼り付けます。
POSTGRES_PASSWORD=t3chr3public
POSTGRES_USER=TechRepublic
ファイルを保存して閉じます。
さて、これらの変数をどうやって渡すのでしょうか?簡単です。次のコマンドを発行します。
docker run --name postgresql --env-file .env -d postgres
.envファイルへのフルパスを使用してください(ファイルと同じディレクトリからdockerコマンドを実行していない場合)。コンテナがデプロイされ、使用可能になります。PostgreSQLコンソールにアクセスしてテストできます。唯一の違いは、ユーザーを手動で入力する必要があることです(ホストシステムでPOSTGRES_USER変数を設定していないため)。そのコマンドは以下のようになります。
docker exec -it postgresql psql -U TechRepublic
以上が、コマンドラインまたは.envファイルを使用してDockerコンテナに環境変数を渡す方法です。この方法を開発ワークフローに活用することで、作業効率が少しでも向上することを願っています。
Jack Wallen によるビジネス プロフェッショナル向けの最新のテクノロジー アドバイスをすべて知るには、YouTube でTechRepublic の How To Make Tech Work を購読してください。

イラスト:リサ・ホーナング/TechRepublic