Docker Composeで複数環境を一瞬で切り替える方法

Docker Composeは、複数のコンテナを簡単に管理できる強力なツールです。特に、開発、テスト、ステージング、そして本番環境など、異なる環境でアプリケーションを実行する際に非常に便利です。しかし、環境を切り替える際に手動で設定を変更するのは面倒で、エラーが発生する可能性もあります。

本記事では、Docker Composeを使用して複数の環境を一瞬で切り替える方法について詳しく解説します。

1. Docker Composeの基本理解

Docker Composeは、YAMLファイルを使用してアプリケーションのサービスを定義し、複数のコンテナを一括で管理するためのツールです。基本的な構成は以下のようになります。

version: '3.8'

services:
  web:
    image: nginx
    ports:
      - "8080:80"
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: example

この例では、NginxとPostgreSQLの2つのサービスを定義しています。docker-compose upコマンドを実行することで、これらのサービスを一度に起動できます。

2. 環境ごとの設定ファイルの管理

異なる環境で異なる設定を使用する場合、複数のComposeファイルを作成することが推奨されます。これにより、環境ごとに異なる設定を簡単に管理できます。

2.1. 基本のComposeファイル

まず、基本のComposeファイルを作成します。これには、共通の設定を含めます。

# docker-compose.yml
version: '3.8'

services:
  web:
    image: nginx
    ports:
      - "8080:80"
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: example

2.2. 環境ごとのオーバーライドファイル

次に、開発環境用のオーバーライドファイルを作成します。このファイルには、開発環境特有の設定を追加します。

# docker-compose.override.yml
version: '3.8'

services:
  web:
    environment:
      - ENV=development
    volumes:
      - ./dev:/usr/share/nginx/html
  db:
    environment:
      POSTGRES_PASSWORD: dev_password

この設定により、開発環境ではNginxがローカルのdevフォルダを参照し、PostgreSQLのパスワードが異なるものになります。

3. 環境の切り替え

Docker Composeでは、複数のComposeファイルを指定して実行することができます。これにより、環境を簡単に切り替えることが可能です。

3.1. 環境ごとのComposeファイルを使用する

例えば、開発環境と本番環境で異なる設定を持つ場合、次のようにファイルを分けます。

# docker-compose.prod.yml
version: '3.8'

services:
  web:
    image: nginx
    ports:
      - "80:80"
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: prod_password

このように、docker-compose.prod.ymlファイルを作成し、本番環境用の設定を記述します。

3.2. コマンドラインでの切り替え

環境を切り替える際は、-fオプションを使用して複数のComposeファイルを指定します。

# 開発環境を起動
docker-compose up -d

# 本番環境を起動
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d

このコマンドにより、開発環境と本番環境を簡単に切り替えることができます。

4. 環境変数の利用

環境変数を使用することで、設定をさらに柔軟に管理できます。.envファイルを作成し、環境変数を定義します。

# .env
POSTGRES_PASSWORD=example

Composeファイル内でこの環境変数を参照することができます。

# docker-compose.yml
version: '3.8'

services:
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}

この方法により、環境変数を変更するだけで、異なる環境に対応することができます。

5. スクリプトによる自動化

環境の切り替えをさらに簡単にするために、シェルスクリプトを作成して自動化することも可能です。以下は、環境を切り替えるための簡単なスクリプトの例です。

#!/bin/bash

if [ "\$1" == "dev" ]; then
  docker-compose up -d
elif [ "\$1" == "prod" ]; then
  docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
else
  echo "Usage: \$0 {dev|prod}"
fi

このスクリプトを実行することで、開発環境または本番環境を簡単に起動できます。

# 開発環境を起動
./switch_env.sh dev

# 本番環境を起動
./switch_env.sh prod

6. まとめ

Docker Composeを使用することで、複数の環境を簡単に管理し、切り替えることができます。以下のポイントを押さえておくと、環境の切り替えがスムーズになります。

  • 複数のComposeファイルを使用する
    • 環境ごとに異なる設定を持つファイルを作成し、必要に応じて切り替える。
  • 環境変数を活用する
    • .envファイルを使用して、設定を柔軟に管理する。
  • スクリプトで自動化する
    • 環境の切り替えをスクリプト化することで、手間を省く。

これらの方法を駆使することで、Docker Composeを利用した開発がより効率的になります。

参考

タイトルとURLをコピーしました