Docker Composeで複数コンテナを一括管理!開発効率を爆上げする使い方
こんにちは、とまだです。
みなさん、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:
この構成のポイント:
- サービス名(
api
、db
など)がそのままホスト名として使える 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
これで、コンテナが正常に動作しているかを自動でチェックできます。
チーム開発での活用方法
新メンバーの環境構築を爆速に
新しいメンバーがジョインしたとき、従来なら:
- Node.jsをインストールして...
- MySQLをインストールして...
- Redisをインストールして...
- 各種設定ファイルを作って...
半日かかっていた作業が、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 を中心に、プログラミング教育に情熱を注いでいます。初心者が楽しく学べる環境作りを目指しています。
著者の詳細を見る →