Dockerコンテナへの環境変数の渡し方:コード例
Dockerコンテナへの環境変数の渡し方
環境変数とは
環境変数は、アプリケーションやスクリプトが実行される環境に関する情報を保持する動的な名前付き値です。Dockerコンテナにおいて、環境変数はコンテナ内のアプリケーションの設定や動作を柔軟に制御する手段として利用されます。
Dockerコマンドラインオプションによる指定
docker run
コマンドの-e
または--env
オプションを使用して、環境変数を直接指定します。
docker run -e MY_VARIABLE=value -e ANOTHER_VARIABLE=another_value image_name
Dockerfileによる指定
ENV
命令を使用して、Dockerイメージビルド時に環境変数を設定します。
ENV MY_VARIABLE=default_value
.envファイルによる指定
- 環境変数を
.env
ファイルに記述し、docker-compose
やdocker run
コマンドで読み込ませます。
# .envファイル
MY_VARIABLE=value
ANOTHER_VARIABLE=another_value
# docker-compose.yml
version: '3.7'
services:
my_service:
build: .
environment:
- .env
Docker Composeによる指定
docker-compose.yml
ファイルのenvironment
セクションで環境変数を指定します。
version: '3.7'
services:
my_service:
build: .
environment:
MY_VARIABLE: value
ANOTHER_VARIABLE: another_value
環境変数の利用
コンテナ内のアプリケーションは、環境変数にアクセスするために、通常はシェル変数のように参照します。例えば、Pythonアプリケーションではos.environ['MY_VARIABLE']
のように使用できます。
注意点
- 環境変数の値はコンテナ内でしか有効ではありません。
- セキュリティ上の理由から、機密情報を環境変数に直接設定するのは避けてください。
- 環境変数の値は、コンテナが再起動されると失われる可能性があります。
環境変数の渡し方
docker run -e MY_VARIABLE=value -e ANOTHER_VARIABLE=another_value image_name
-e
または--env
オプションを使用して、コンテナ起動時に環境変数を設定します。
ENV MY_VARIABLE=default_value
# .envファイル
MY_VARIABLE=value
ANOTHER_VARIABLE=another_value
# docker-compose.yml
version: '3.7'
services:
my_service:
build: .
environment:
- .env
.env
ファイルに環境変数を定義し、docker-compose
で読み込みます。
version: '3.7'
services:
my_service:
build: .
environment:
MY_VARIABLE: value
ANOTHER_VARIABLE: another_value
docker-compose.yml
ファイルで環境変数を定義します。
import os
my_variable = os.environ.get('MY_VARIABLE', 'default_value')
print(my_variable)
- Pythonの
os
モジュールを使用して環境変数にアクセスします。
Docker環境変数設定ガイド
環境変数の優先度
- コマンドラインオプション > Dockerfile >
.env
ファイル > Docker Compose
- Docker Composeでは、環境変数を
${変数名}
の形で展開できます。version: '3.7' services: my_service: image: my_image environment: DATABASE_URL: "postgres://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}"
環境変数のデフォルト値
- Docker Composeでは、デフォルト値を設定できます。
version: '3.7' services: my_service: environment: MY_VARIABLE: ${MY_VARIABLE:-default_value}
環境変数のセキュリティ
- 機密情報を環境変数に直接設定するのは避けてください。
- 環境変数を暗号化したり、シークレット管理サービスを利用することを検討してください。
代替方法
環境変数ファイルの利用
--env-file
オプションを使用して、環境変数を定義したテキストファイルを読み込むことができます。docker run --env-file .env image_name
- .envファイルのフォーマットは、
変数名=値
の形式です。
- .envファイルのフォーマットは、
コマンドラインからの環境変数の継承
--env
オプションに何も指定せずに使用すると、ホストシステムの環境変数をコンテナに継承できます。MY_VARIABLE=value docker run --env MY_VARIABLE image_name
Docker Composeの環境変数展開
- コマンドラインオプション > Docker Compose > Dockerfile > .envファイル
環境変数のオーバーライド
- 後続の設定が前の設定をオーバーライドします。例えば、Dockerfileで設定した環境変数は、
docker run
コマンドの-e
オプションで上書きできます。
- Docker SecretsやVaultなどのツールを活用することで、機密情報を安全に管理できます。
- 大量の環境変数を扱う場合は、環境変数管理ツールや構成管理ツールを利用することで効率的に管理できます。
- AnsibleやPuppetなどの構成管理ツールを使用して、環境変数を一元管理することも可能です。
docker environment-variables dockerfile