Docker Compose は、ローカル開発用のマルチコンテナ Docker アプリケーションの定義と実行プロセスを簡素化する強力なツールです。これにより、単一の `docker-compose.y

Docker Compose は、ローカル開発用のマルチコンテナ Docker アプリケーションの定義と実行プロセスを簡素化する強力なツールです。これにより、単一の docker-compose.yml ファイルでアプリケーションのサービス、ネットワーク、ボリュームを設定でき、単一のコマンドで開発環境全体を起動できます。

Beginner

Docker Compose は、ローカル開発用のマルチコンテナ Docker アプリケーションの定義と実行プロセスを簡素化する強力なツールです。これにより、単一の docker-compose.yml ファイルでアプリケーションのサービス、ネットワーク、ボリュームを設定でき、単一のコマンドで開発環境全体を起動できます。

ローカル開発で Docker Compose を使用する理由

  • 簡単なセットアップ: 複数の依存関係(例:Web アプリ、データベース、キャッシュサービス)を持つ複雑な開発環境のセットアッププロセスを合理化します。
  • 再現可能な環境: ローカル環境が本番環境と密接に一致することを保証し、「私のマシンでは動作します」という問題を減らします。
  • 依存関係管理: ホストマシン上で競合することなく、さまざまなバージョンのサービス(例:データベース、メッセージキュー)を簡単に管理できます。
  • オンボーディング: 新しい開発者は、単一のコマンドでプロジェクトを迅速に実行できます。

主要な概念

  1. docker-compose.yml (または compose.yaml): この YAML ファイルは Docker Compose の中心です。アプリケーションを構成するサービス、ネットワーク、ボリュームを定義します。
  2. サービス (Services): docker-compose.yml 内の各サービスはコンテナを表します。たとえば、アプリケーション用の web サービス、データベース用の db サービス、キャッシュ用の redis サービスがある場合があります。
  3. ネットワーク (Networks): Docker Compose はデフォルトでアプリケーションに単一のネットワークを設定し、サービスがサービス名をホスト名として使用して互いに通信できるようにします。
  4. ボリューム (Volumes): 永続的なデータストレージ(例:データベースデータ)や、開発中のライブリロードを可能にするためにローカルコードをコンテナにマウントするために使用されます。

基本的なワークフローとコマンド

  1. docker-compose.yml でサービスを定義する: プロジェクトのルートディレクトリに docker-compose.yml ファイルを作成します。

    Redis キャッシュに接続された Python Flask Web アプリケーションの簡単な例を次に示します。

    ```yaml

    docker-compose.yml

    version: '3.8' # Compose ファイル形式のバージョンを指定します services: web: build: . # 現在のディレクトリの Dockerfile からビルドします ports: - "8000:5000" # ホストポート 8000 をコンテナポート 5000 にマッピングします volumes: - .:/code # 現在のディレクトリをコンテナの /code ディレクトリにマウントします environment: FLASK_ENV: development # 環境変数を設定します REDIS_HOST: redis # サービス名 'redis' をホスト名として使用します redis: image: "redis:alpine" # 公式 Redis イメージを使用します ports: - "6379:6379" # Redis ポートをマッピングします volumes: - redis_data:/data # Redis データを永続化します volumes: redis_data: # 名前付きボリュームを定義します ```

  2. アプリケーションをビルドして実行する: ターミナルでプロジェクトディレクトリに移動し、次を実行します。 bash docker compose up このコマンドは、イメージをビルドし(必要な場合)、docker-compose.yml ファイルで定義されたすべてのサービスを開始します。

    サービスをバックグラウンド(分離モード)で実行するには、次を使用します。 bash docker compose up -d

  3. サービスを停止および削除する: 開発が完了したら、Compose によって作成されたすべてのコンテナ、ネットワーク、およびボリュームを停止および削除します。 bash docker compose down 名前付きボリュームも削除するには docker compose down -v を使用します(これにより永続データが削除されます)。

  4. ログを表示する: 実行中のサービスのログを表示するには: bash docker compose logs [service_name] # 例:docker compose logs web # -f を使用してリアルタイムでログをフォローします: # docker compose logs -f web

  5. サービス内でコマンドを実行する: exec を使用して、実行中のコンテナ内でコマンドを実行できます。 bash docker compose exec web bash # これは 'web' サービスコンテナ内で bash シェルを開きます。

ローカル開発のベストプラクティス

  • ライブリロードのためのボリュームマウント: ローカルコードディレクトリをコンテナにマウントします (volumes: - .:/code)。これにより、イメージを再ビルドせずにコードの変更が即座に反映されます。
  • 環境変数: .env ファイルを使用して環境固有の変数(API キーやデータベース認証情報など)を管理し、docker-compose.yml ファイルやバージョン管理から除外します。
  • ヘルスチェック: 依存サービスが開始される前にサービスが準備完了であることを確認するために、docker-compose.yml でヘルスチェックを実装します。
  • 軽量イメージ: 最小限のベースイメージ(Alpine バリアントなど)とマルチステージビルドを使用して、イメージサイズを小さく保ちます。

これらの手順に従うことで、Docker Compose を効果的に活用し、マルチコンテナ アプリケーション用の整合性の取れた、分離された、簡単に管理できるローカル開発環境を作成できます。