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