Docker Composeの書き方ガイド

Docker Composeとは

Docker Composeは、複数のコンテナを一括で定義・起動・管理できる公式ツールです。設定はdocker-compose.ymlという YAML 形式のファイルに記述します。

docker-compose.yml の基本構造

Compose ファイルの最低限の構造は次の通りです。

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

主要ディレクティブの説明

  • version:Compose のファイルバージョン。最新の機能を使うには “3.8” などを指定します。
  • services:起動するコンテナ(サービス)を定義します。
  • image:使用する Docker イメージ。
  • build:Dockerfile からビルドする場合に指定。
  • ports:ホストとコンテナのポートマッピング。
  • volumes:ホストディレクトリや named volume をマウント。
  • environment:環境変数を設定。
  • depends_on:起動順序の依存関係を定義。

実践的なサンプル

Web アプリ(Node.js)とデータベース(PostgreSQL)を組み合わせた例です。

version: '3.8'
services:
  web:
    build: ./web
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
    depends_on:
      - db
    volumes:
      - ./:/app
  db:
    image: postgres:13
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: mydb
    volumes:
      - db_data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
volumes:
  db_data:

ポイント解説

  • Web サービスは build でローカルの Dockerfile を指定し、コード変更時に自動でリビルドできます。
  • depends_on によって DB が先に起動することを保証しますが、起動後のヘルスチェックは別途実装が必要です。
  • 永続化データは volumes セクションで named volume(db_data)として管理し、コンテナ削除後もデータが残ります。

よくある質問

1. Compose ファイルのバージョンはどれを選べば良いですか?

最新機能を利用したい場合は 3.8(または Docker が推奨する最新版)を使用します。古い Docker Engine しか使えない環境では、対応バージョンを確認してください。

2. 環境変数を外部ファイルから読み込むには?

次のように env_file を指定します。

services:
  web:
    env_file:
      - .env

3. 複数の Compose ファイルを組み合わせるには?

docker compose -f docker-compose.yml -f docker-compose.override.yml up -d のように -f オプションで複数ファイルを指定できます。上位のファイルが下位の設定を上書きします。