6.1 環境変数の基本
環境変数はアプリケーションの設定において重要な役割を果たし、コードを変更せずにサービスの動作や設定を動的に変更することができるんだよ。Docker Composeは環境変数を使ったコンテナの設定をサポートしてるから、設定管理が柔軟で便利になるんだ。
環境変数を管理する最も便利な方法の1つは、.envファイルを使うことだね。このレクチャーでは、Docker Composeで環境変数を使用する方法、特に.envファイルの作成と使用について詳しく見ていこう。
Docker Composeでの環境変数の基本
環境変数はcompose.yamlファイルで設定のパラメータ化に使用できるんだ。これらの変数は.envファイルで定義することも、compose.yaml自体に書き込むことも、コマンドライン経由で直接渡すこともできるよ。
compose.yaml内で環境変数を使用した例:
この例ではNGINX_VERSIONとHOST_PORTという変数を使用してる。その値は.envファイルで指定するか、コマンドラインで渡すことができるんだ。
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
6.2 .env ファイルの使用
1. .envファイルの作成
.envファイルはcompose.yamlと同じディレクトリに配置されており、環境変数の値を定義する「キーと値」のペアを含みます。各変数は新しい行で指定します。
.envファイルの例:
NGINX_VERSION=latest
HOST_PORT=8080
DB_USER=admin
DB_PASSWORD=secret
2. Docker Composeへの.envファイルの統合
Docker Composeは.envファイルを自動的に読み込みます。このファイルはcompose.yamlと同じディレクトリにある必要があります。
環境変数を使用したcompose.yamlファイルの例:
この例では、NGINX_VERSION、HOST_PORT、DB_USER、DB_PASSWORD変数が.envファイルから取得されます。
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
db:
image: postgres:latest
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
6.3 変数の渡し方
コマンドラインを通した変数の渡し方
環境変数は、Unix系のシステムではexportコマンドを使用するか、またはDocker Composeで--env-fileパラメータを使うことで、コマンドラインから直接渡すことができるよ。
exportを使った例:
export NGINX_VERSION=latest
export HOST_PORT=8080
docker compose up
--env-fileを使った例:
--env-fileパラメータを使って、環境変数が記述された別のファイルを指定することができるよ。
docker compose --env-file .env.dev up
Docker Composeでの組み込み環境変数の利用
Docker Composeでは、${PWD}のような現在の作業ディレクトリを表す組み込みの環境変数をサポートしているよ。
例:
version: '3.8'
services:
app:
image: myapp:latest
volumes:
- ${PWD}/app:/app
6.4 実践例
環境変数の実践例を見てみよう:
例1: Webサーバーとデータベースの設定
.env ファイルを作成し、Webサーバーとデータベース用のパラメータを設定する:
NGINX_VERSION=1.19.3
HOST_PORT=8080
DB_USER=myuser
DB_PASSWORD=mypassword
次に、これらの変数を使用する compose.yaml ファイルを作成する:
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
db:
image: postgres:latest
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:
Docker Composeを起動する:
docker compose up
例2: 開発環境と本番環境の分離
2つの .env ファイルを作成する: .env.dev と .env.prod. それぞれの環境に対応する設定を記載する。
.env.dev ファイル:
NGINX_VERSION=latest
HOST_PORT=8080
DB_USER=devuser
DB_PASSWORD=devpassword
.env.prod ファイル:
NGINX_VERSION=1.19.3
HOST_PORT=80
DB_USER=produser
DB_PASSWORD=prodpassword
これらの変数を使用する compose.yaml ファイルを作成する:
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
db:
image: postgres:latest
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:
開発用のDocker Composeを起動:
docker compose --env-file .env.dev up
本番用のDocker Composeを起動:
docker compose --env-file .env.prod up
GO TO FULL VERSION