Docker Composeで複数コンテナを一括管理!開発効率を爆上げする使い方

docker icon
Docker

こんにちは、とまだです。

みなさん、Dockerで複数のコンテナを起動するとき、「また同じコマンドを何度も打つのか...」とため息をついたことはありませんか?

今回は現役のエンジニア、そして元プログラミングスクール講師としての経験から、Docker Composeを使った効率的な開発環境の構築方法について解説します。

Docker Composeとは?複数コンテナの管理がラクになる魔法のツール

簡単に言うと、Docker Composeは「複数のDockerコンテナを設定ファイル1つで管理できるようにするツール」です。

例えば、レストランの厨房を想像してみてください。

  • フライパン(Webサーバ)
  • 冷蔵庫(データベース)
  • オーブン(キャッシュサーバ)

これらを1つずつ準備するのではなく、「営業開始ボタン」を押すだけで全部が使える状態になる、みたいなイメージです。

なぜDocker Composeが必要?通常のDockerとの違い

通常のDockerだと、こんな感じでコマンドを何度も打つ必要があります。

# データベースを起動
docker run -d --name mysql-db -e MYSQL_ROOT_PASSWORD=password mysql

# Redisを起動
docker run -d --name redis-cache redis

# Webアプリを起動(長い...)
docker run -d --name web-app -p 3000:3000 --link mysql-db:db --link redis-cache:redis my-app

毎回これを打つのは面倒ですよね。

Docker Composeなら、たった1行で済みます。

docker compose up -d

この違い、大きくないですか?

Docker Composeを使うメリット

Docker Composeを使うと、こんな嬉しいことがあります。

  • コマンド1つで全部のコンテナが起動
  • チームメンバーに「この設定ファイル使って」と渡すだけで環境共有
  • 設定の再利用が簡単(開発環境・テスト環境で使い回せる)

実際のプロジェクトでは、これらのメリットが積み重なって大きな時間短縮につながります。

Docker Composeのインストール方法

事前準備:Dockerは入ってる?

まず確認しましょう。ターミナルで以下を実行してみてください。

docker --version

バージョンが表示されればOKです。

もしエラーが出る場合は、先にDockerをインストールする必要があります。

OS別インストール方法

Windows/Mac Docker Desktopをインストールすれば、Docker Composeも一緒についてきます。 特別な設定は不要です。

Linux(Ubuntu/Debian)

# Docker Composeプラグインをインストール
sudo apt-get update
sudo apt-get install docker-compose-plugin

インストール後、動作確認をしてみましょう。

docker compose version

バージョンが表示されれば準備完了です!

Docker Composeの設定ファイルを書いてみよう

基本の「き」:docker-compose.yml

Docker Composeの設定は、docker-compose.ymlという1つのファイルに書きます。

最もシンプルな例から見てみましょう。

version: "3"
services:
  web:
    image: nginx
    ports:
      - "80:80"

これだけで、Nginxサーバーが起動します。

各部分の意味:

  • version: Docker Composeのバージョン(3が一般的)
  • services: ここに使いたいコンテナを書く
  • web: サービス名(好きな名前でOK)
  • image: 使うDockerイメージ
  • ports: ポート転送の設定

実践的な例:WordPressサイトを作ってみる

理解を深めるため、実際に使える設定を見てみましょう。

version: "3"
services:
  wordpress:
    image: wordpress
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress123
    depends_on:
      - db

  db:
    image: mysql:5.7
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress123
      MYSQL_ROOT_PASSWORD: rootpass123
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:

この設定で、WordPressとMySQLが連携して動きます。

ポイントはdepends_on。これでWordPressがデータベースの起動を待ってから立ち上がります。

実際に起動してみよう

起動は超簡単

作成したdocker-compose.ymlと同じディレクトリで、以下のコマンドを実行します。

# バックグラウンドで起動
docker compose up -d

たったこれだけです。

よく使うコマンド集

# 起動中のコンテナを確認
docker compose ps

# ログを見る
docker compose logs

# 特定のサービスのログだけ見る
docker compose logs wordpress

# 停止(コンテナは残る)
docker compose stop

# 停止して削除
docker compose down

# ボリュームも含めて全削除
docker compose down -v

環境変数で設定を柔軟に

本番環境と開発環境でパスワードを変えたい場合、環境変数が便利です。

.envファイルを作成:

DB_PASSWORD=dev_password123
DB_ROOT_PASSWORD=dev_root123

docker-compose.ymlで使用:

services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_PASSWORD: ${DB_PASSWORD}
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}

これで環境ごとに異なる設定が可能になります。

※注意:.envファイルはGitにコミットしないようにしましょう!

実践的な構成例:フルスタックアプリケーション

実際のプロジェクトでよく使う構成を紹介します。

version: "3"
services:
  # フロントエンド
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    depends_on:
      - api
    environment:
      - REACT_APP_API_URL=http://api:4000

  # バックエンドAPI
  api:
    build: ./backend
    ports:
      - "4000:4000"
    depends_on:
      - db
      - redis
    environment:
      - DATABASE_URL=postgres://user:pass@db:5432/myapp
      - REDIS_URL=redis://redis:6379

  # データベース
  db:
    image: postgres:14
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=pass
      - POSTGRES_DB=myapp
    volumes:
      - postgres_data:/var/lib/postgresql/data

  # キャッシュ
  redis:
    image: redis:alpine
    ports:
      - "6379:6379"

volumes:
  postgres_data:

この構成のポイント:

  • サービス名(apidbなど)がそのままホスト名として使える
  • depends_onで起動順序を制御
  • 環境変数で接続情報を管理

トラブルシューティング:よくある問題と解決法

「コンテナが起動しない」

まずはログを確認しましょう。

docker compose logs サービス名

よくある原因:

  • ポートが既に使用中 → 別のポートに変更
  • 環境変数の設定ミス → .envファイルを確認
  • イメージのダウンロード失敗 → ネットワークを確認

「コンテナ間で通信できない」

サービス名を正しく使っているか確認してください。

# ❌ 間違い:IPアドレスやlocalhostを使う
DATABASE_URL=postgres://user:pass@localhost:5432/db

# ✅ 正解:サービス名を使う
DATABASE_URL=postgres://user:pass@db:5432/myapp

「データが消えた!」

ボリュームを使い忘れていませんか?

# データを永続化する設定
services:
  db:
    image: postgres
    volumes:
      - postgres_data:/var/lib/postgresql/data  # これが重要!

volumes:
  postgres_data:  # ボリュームの定義も忘れずに

実務で使える応用テクニック

複数の設定ファイルを使い分ける

開発環境と本番環境で設定を分けたい場合:

# 基本設定
docker-compose.yml

# 開発環境用の追加設定
docker-compose.dev.yml

# 本番環境用の追加設定
docker-compose.prod.yml

使い方:

# 開発環境
docker compose -f docker-compose.yml -f docker-compose.dev.yml up

# 本番環境
docker compose -f docker-compose.yml -f docker-compose.prod.yml up

ヘルスチェックで安定性向上

services:
  api:
    image: myapp
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:4000/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

これで、コンテナが正常に動作しているかを自動でチェックできます。

チーム開発での活用方法

新メンバーの環境構築を爆速に

新しいメンバーがジョインしたとき、従来なら:

  1. Node.jsをインストールして...
  2. MySQLをインストールして...
  3. Redisをインストールして...
  4. 各種設定ファイルを作って...

半日かかっていた作業が、Docker Composeなら:

git clone プロジェクト
cd プロジェクト
docker compose up -d

5分で完了です。

プロジェクトでの運用例

my-project/
├── docker-compose.yml      # メイン設定
├── .env.example           # 環境変数のサンプル
├── frontend/
│   └── Dockerfile
├── backend/
│   └── Dockerfile
└── README.md              # セットアップ手順

READMEに以下を書いておくと親切です:

## セットアップ
1. `.env.example``.env`にコピー
2. `docker compose up -d`を実行
3. http://localhost:3000 にアクセス

Docker ComposeとKubernetesの使い分け

「Docker ComposeとKubernetes、どっちを使えばいいの?」という質問をよく受けます。

簡単に言うと:

  • Docker Compose:開発環境、小規模なプロジェクト向け
  • Kubernetes:本番環境、大規模なシステム向け

具体的な判断基準:

Docker Composeが向いている場合

  • チーム規模が10人以下
  • サーバー1台で十分
  • 自動スケーリングが不要
  • すぐに使い始めたい

Kubernetesが必要になる場合

  • 複数のサーバーで運用
  • 自動スケーリングが必要
  • ゼロダウンタイムでのデプロイが必須
  • 大規模なマイクロサービス構成

まずはDocker Composeから始めて、必要に応じてKubernetesに移行するのが現実的です。

実践演習:今すぐ試せるサンプル

1. シンプルなブログシステム

version: "3"
services:
  ghost:
    image: ghost:5-alpine
    ports:
      - "2368:2368"
    environment:
      database__client: mysql
      database__connection__host: db
      database__connection__user: root
      database__connection__password: ghostpass
      database__connection__database: ghost
    volumes:
      - ghost_content:/var/lib/ghost/content
    depends_on:
      - db

  db:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: ghostpass
      MYSQL_DATABASE: ghost
    volumes:
      - ghost_db:/var/lib/mysql

volumes:
  ghost_content:
  ghost_db:

起動して http://localhost:2368 にアクセスすれば、すぐにブログが使えます。

2. 開発用データベース環境

version: "3"
services:
  postgres:
    image: postgres:14
    ports:
      - "5432:5432"
    environment:
      POSTGRES_PASSWORD: devpass
    volumes:
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql

  adminer:
    image: adminer
    ports:
      - "8080:8080"
    depends_on:
      - postgres

データベース管理ツール付きですぐに開発が始められます。

まとめ:Docker Composeで開発を加速させよう

Docker Composeを使えば、複雑な開発環境も設定ファイル1つで管理できます。

覚えておきたいポイント:

  • docker-compose.ymlに全ての設定を書く
  • docker compose up -dで一括起動
  • サービス名でコンテナ間通信ができる
  • 環境変数で柔軟な設定が可能
  • チーム開発での環境共有が簡単

最初は簡単な構成から始めて、徐々に複雑な構成にチャレンジしてみてください。

次のステップとしては、実際にプロジェクトでDocker Composeを使ってみることをおすすめします。きっと開発効率の向上を実感できるはずです。

共有:

著者について

とまだ

とまだ

フルスタックエンジニア

Learning Next の創設者。Ruby on Rails と React を中心に、プログラミング教育に情熱を注いでいます。初心者が楽しく学べる環境作りを目指しています。

著者の詳細を見る →