Tips

開発Tips(2025-11-09)

Docker Composeを使って複数のコンテナを連携させ、開発環境を簡単に構築・管理するためのテクニックです。サービス間の依存関係を定義し、コマンド一つで環境を立ち上げることができます。

Docker

Docker Composeを使って複数のコンテナを連携させ、開発環境を簡単に構築・管理するためのテクニックです。サービス間の依存関係を定義し、コマンド一つで環境を立ち上げることができます。

Docker Composeによる開発環境の定義

Docker Composeを使用すると、アプリケーションの各コンポーネント(Webサーバー、データベース、キャッシュなど)を個別のコンテナとして定義し、それらをまとめて管理できます。 docker-compose.yml ファイルでサービス、ネットワーク、ボリュームなどの設定を記述し、環境の再現性を高めます。

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - app

  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=development
    volumes:
      - .:/app
    command: npm start

  db:
    image: postgres:13
    environment:
      POSTGRES_USER: myuser
      POSTGRES_PASSWORD: mypassword
    volumes:
      - db_data:/var/lib/postgresql/data

volumes:
  db_data:

説明:

  • version: Docker Composeファイルのバージョンを指定します。
  • services: アプリケーションを構成するサービス(コンテナ)を定義します。
  • web: Nginx Webサーバーの定義。ポート80を公開し、ローカルの./htmlディレクトリをコンテナ内の/usr/share/nginx/htmlにマウントします。appサービスに依存します。
  • app: アプリケーションの定義。Dockerfileからイメージをビルドし、ポート3000を公開し、環境変数を設定し、ローカルの.ディレクトリをコンテナ内の/appにマウントします。npm startコマンドを実行します。
  • db: PostgreSQLデータベースの定義。環境変数を設定し、db_dataボリュームをコンテナ内の/var/lib/postgresql/dataにマウントします。
  • volumes: 永続化するボリュームを定義します。

注意点:

  • docker-compose.yml ファイルはプロジェクトのルートディレクトリに配置するのが一般的です。
  • depends_on を使用して、サービスの起動順序を制御できます。
  • ボリュームを使用することで、コンテナが停止してもデータを保持できます。

おすすめポイント:

  • 開発環境の構築が非常に簡単になり、チーム全体で同じ環境を共有できます。
  • 設定ファイルとして環境を定義するため、環境構築の手順をドキュメント化する必要がなくなります。
  • スケールアップも容易で、本番環境への移行もスムーズに行えます。