CodeGym /コース /Docker SELF /Docker Compose での環境変数

Docker Compose での環境変数

Docker SELF
レベル 16 , レッスン 0
使用可能

6.1 環境変数の基本

環境変数はアプリケーションの設定において重要な役割を果たし、コードを変更せずにサービスの動作や設定を動的に変更することができるんだよ。Docker Composeは環境変数を使ったコンテナの設定をサポートしてるから、設定管理が柔軟で便利になるんだ。

環境変数を管理する最も便利な方法の1つは、.envファイルを使うことだね。このレクチャーでは、Docker Composeで環境変数を使用する方法、特に.envファイルの作成と使用について詳しく見ていこう。

Docker Composeでの環境変数の基本

環境変数はcompose.yamlファイルで設定のパラメータ化に使用できるんだ。これらの変数は.envファイルで定義することも、compose.yaml自体に書き込むことも、コマンドライン経由で直接渡すこともできるよ。

compose.yaml内で環境変数を使用した例:

この例ではNGINX_VERSIONHOST_PORTという変数を使用してる。その値は.envファイルで指定するか、コマンドラインで渡すことができるんだ。

Yaml

version: '3.8'

services:
  web:
    image: nginx:${NGINX_VERSION}
    ports:
      - "${HOST_PORT}:80"

6.2 .env ファイルの使用

1. .envファイルの作成

.envファイルはcompose.yamlと同じディレクトリに配置されており、環境変数の値を定義する「キーと値」のペアを含みます。各変数は新しい行で指定します。

.envファイルの例:

.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_VERSIONHOST_PORTDB_USERDB_PASSWORD変数が.envファイルから取得されます。

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}

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}のような現在の作業ディレクトリを表す組み込みの環境変数をサポートしているよ。

例:

Yaml

version: '3.8'

services:
  app:
    image: myapp:latest
    volumes:
      - ${PWD}/app:/app

6.4 実践例

環境変数の実践例を見てみよう:

例1: Webサーバーとデータベースの設定

.env ファイルを作成し、Webサーバーとデータベース用のパラメータを設定する:

.env

NGINX_VERSION=1.19.3
HOST_PORT=8080
DB_USER=myuser
DB_PASSWORD=mypassword

次に、これらの変数を使用する compose.yaml ファイルを作成する:

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を起動する:

Terminal

docker compose up

例2: 開発環境と本番環境の分離

2つの .env ファイルを作成する: .env.dev.env.prod. それぞれの環境に対応する設定を記載する。

.env.dev ファイル:

.env

NGINX_VERSION=latest
HOST_PORT=8080
DB_USER=devuser
DB_PASSWORD=devpassword

.env.prod ファイル:

.env

NGINX_VERSION=1.19.3
HOST_PORT=80
DB_USER=produser
DB_PASSWORD=prodpassword

これらの変数を使用する compose.yaml ファイルを作成する:

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を起動:

Terminal

docker compose --env-file .env.dev up

本番用のDocker Composeを起動:

Terminal

docker compose --env-file .env.prod up
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION