「開発環境の構築で毎回つまずく」「担当者が変わると環境を再現できない」――チーム開発でこうした問題を感じたことはありませんか?
この記事では、Docker Composeの基礎から実践的な使い方まで、インストール方法、基本コマンド、設定ファイルの書き方をステップバイステップで解説します。
Docker Composeとは?複数コンテナを一元管理するツール
「開発環境の構築で毎回つまずく」「担当者が変わると環境が再現できない」——こんな悩みを抱えていませんか?
Docker Composeは、複数のDockerコンテナを1つの設定ファイルで一元管理できるツールです。これまで手作業で行っていた環境構築を自動化でき、属人化の防止や業務効率化に直結します。
この記事では、Docker Composeの基礎から実践的な使い方まで、初心者の方にも分かりやすく解説します。
Docker Composeが解決する3つの課題
1. 環境構築の属人化を解消
「この環境は○○さんしか構築できない」という状況は、企業にとって大きなリスクです。Docker Composeを使えば、環境構築の手順が1つのファイルに集約されるため、誰でも同じ環境を再現できます。
2. 新人教育の時間を大幅短縮
従来は複雑な手順を1つずつ教える必要がありましたが、Docker Composeなら「このコマンドを実行してください」だけで済みます。
3. 環境差異による不具合を削減
「ローカルでは動いたのに本番では動かない」という問題の多くは環境の違いが原因です。Docker Composeで環境を統一すれば、こうした問題を大幅に減らせます。
通常のDockerコマンドとの違い
Dockerコマンドだけでも環境構築は可能ですが、複数のコンテナを扱う場合は管理が煩雑になります。
通常のDockerでは、各コンテナを個別に起動し、ネットワーク設定や環境変数を1つずつ指定する必要があります。一方、Docker Composeなら、これらすべての設定を1つのYAMLファイルに記述し、docker-compose upという1つのコマンドで起動できます。
設定の可視化も大きな違いです。ファイルを見れば構成が一目瞭然なため、チームでの共有や引き継ぎがスムーズになります。
Docker Composeの基礎知識
Docker Composeを効果的に使うための基本概念を押さえておきましょう。
コンテナとイメージの仕組み
イメージは、アプリケーションを動かすための「設計図」です。例えば、WordPress用のイメージには、WordPressを動かすために必要なすべてのファイルや設定が含まれています。
コンテナは、そのイメージから実際に作られた「実行環境」です。設計図(イメージ)から建物(コンテナ)を建てるイメージです。
従来の仮想マシンと比べて軽量で高速なのが特徴で、起動が速く、リソースの消費も少なくて済みます。
主要な用語解説
サービス(Service): 1つの役割を持つコンテナの定義。「Webサーバー」「データベース」など、それぞれがサービスとして定義されます。
ボリューム(Volume): データを永続化する場所。コンテナは削除するとデータも消えますが、ボリュームを使えばデータを保持できます。
ネットワーク(Network): コンテナ同士が通信するための仕組み。Docker Composeでは、同じ設定ファイルで定義したサービス同士は自動的に通信できます。
ポート(Port): 外部からアクセスするための「入口」。Webサーバーを外部から見られるようにするには、ポートを公開する設定が必要です。
環境変数(Environment): アプリケーションの設定を外部から渡す仕組み。データベースのパスワードなど、環境によって変わる値を設定します。
インストール方法
Docker Composeを使うには、まずDockerのインストールが必要です。最近のDocker Desktop(Windows/Mac版)には、Docker Composeが標準で含まれています。
システム要件
- Windows: Windows 10/11 Pro/Enterprise/Education(64bit)、WSL2が有効
- Mac: macOS 10.15以降、Intel ChipまたはApple Silicon
- Linux: 64bit版、カーネル3.10以降
- メモリ: 最低4GB、推奨8GB以上
- ディスク: 20GB以上の空き容量
インストール手順
Windows/Mac
- Docker公式サイトから、Docker Desktopをダウンロード
- インストーラーを実行し、画面の指示に従う
- Docker Desktopを起動
Linux(Ubuntu/Debian)
# 必要なパッケージをインストール
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
# Dockerの公式GPGキーを追加
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# リポジトリを設定
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Docker Engineをインストール
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 一般ユーザーで使えるように設定
sudo usermod -aG docker $USER
インストール確認
# Dockerのバージョン確認
docker --version
# Docker Composeのバージョン確認
docker compose version
# 動作確認
docker run hello-world
「Hello from Docker!」というメッセージが表示されれば成功です。
docker-compose.ymlファイルの書き方
Docker Composeの中心となるのがdocker-compose.ymlという設定ファイルです。YAML形式で記述します。
YAMLファイルの基本ルール
インデント(字下げ)でデータの階層を表現します。これが最も重要なルールです。
親要素:
子要素1: 値
子要素2: 値
重要なポイント:
- インデントは半角スペースのみ(タブ不可)
- スペース2つまたは4つで統一
- コロン(:)の後ろには必ず半角スペース
- リストはハイフン(-)で表現
- コメントはシャープ(#)で記述
基本構造と必須項目
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080:80"
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: password
volumes:
- db-data:/var/lib/mysql
volumes:
db-data:
version: ファイル形式のバージョン(現在は3.8または3.9が一般的)
services: 実行するコンテナの定義
volumes: データを永続化するボリューム定義(省略可)
networks: カスタムネットワーク定義(省略可)
よく使う設定項目
image / build
services:
# 既存イメージを使用
web:
image: nginx:1.21
# Dockerfileからビルド
app:
build:
context: ./app
dockerfile: Dockerfile
ports(ポートマッピング)
services:
web:
image: nginx:latest
ports:
- "8080:80" # ホスト:コンテナ
- "443:443"
volumes(データの永続化)
services:
db:
image: mysql:8.0
volumes:
- db-data:/var/lib/mysql # 名前付きボリューム
- ./init.sql:/docker-entrypoint-initdb.d/init.sql # ファイルマウント
volumes:
db-data:
environment(環境変数)
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: myapp
depends_on(起動順序の制御)
services:
web:
image: nginx:latest
depends_on:
- db # dbが起動してからwebを起動
db:
image: mysql:8.0
restart(再起動ポリシー)
services:
web:
image: nginx:latest
restart: always # 常に再起動
オプション:no(再起動しない)、always(常に再起動)、on-failure(エラー時のみ)、unless-stopped(手動停止以外は再起動)
基本コマンドの使い方
Docker Composeの操作は、主に4つのコマンドで行います。すべてのコマンドはdocker-compose.ymlファイルがあるディレクトリで実行します。
docker-compose up(起動)
サービスを起動します。
# フォアグラウンドで起動(ログが表示される)
docker-compose up
# バックグラウンドで起動
docker-compose up -d
# 特定のサービスのみ起動
docker-compose up web
# イメージを再ビルドして起動
docker-compose up --build
docker-compose down(停止・削除)
サービスを停止し、コンテナを削除します。
# コンテナとネットワークを削除
docker-compose down
# ボリュームも削除
docker-compose down -v
# イメージも削除
docker-compose down --rmi all
docker-compose ps(状態確認)
実行中のコンテナを確認します。
docker-compose ps
docker-compose logs(ログ確認)
コンテナのログを表示します。
# 全サービスのログを表示
docker-compose logs
# 特定のサービスのログ
docker-compose logs web
# ログをリアルタイムで表示
docker-compose logs -f
# 最新100行のみ表示
docker-compose logs --tail=100
その他の便利なコマンド
# コンテナ内でコマンドを実行
docker-compose exec web bash
# サービスを再起動
docker-compose restart
# イメージをビルド
docker-compose build
# 設定ファイルの構文チェック
docker-compose config
実践例:WordPress環境の構築
実際にDocker Composeを使って、WordPress環境を構築してみましょう。
docker-compose.ymlの作成
version: '3.8'
services:
wordpress:
image: wordpress:latest
container_name: my-wordpress
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppass
WORDPRESS_DB_NAME: wordpress
volumes:
- wordpress-data:/var/www/html
depends_on:
- db
restart: unless-stopped
db:
image: mysql:8.0
container_name: my-mysql
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppass
MYSQL_ROOT_PASSWORD: rootpass
volumes:
- db-data:/var/lib/mysql
restart: unless-stopped
volumes:
wordpress-data:
db-data:
起動と確認
# 起動
docker-compose up -d
# 状態確認
docker-compose ps
# ログ確認
docker-compose logs -f
ブラウザでhttp://localhost:8080にアクセスすると、WordPressのセットアップ画面が表示されます。
停止と削除
# 停止(データは保持)
docker-compose down
# データも含めて完全削除
docker-compose down -v
業務活用のポイント
環境の標準化と属人化の防止
Docker Composeの設定ファイルをGitなどで管理すれば、チーム全員が同じ環境で作業できます。「この環境は○○さんしか分からない」という状況を解消できます。
セキュリティ対策
環境変数の管理
パスワードなどの機密情報は、.envファイルに分離します。
# .envファイル
MYSQL_ROOT_PASSWORD=your_secure_password
MYSQL_PASSWORD=your_secure_password
# docker-compose.yml
services:
db:
image: mysql:8.0
env_file:
- .env
.envファイルは.gitignoreに追加し、Gitにコミットしないようにします。
本番環境への展開時の注意
- 開発環境と本番環境で設定ファイルを分ける(詳細はDocker Compose本番環境ガイドを参照)
- 本番では
restart: alwaysを設定 - ポート番号は適切に変更
- ボリュームのバックアップ体制を整える(バックアップ3-2-1ルールを参考に)
よくあるトラブルと解決方法
インデントエラー
症状: yaml: line X: mapping values are not allowed in this context
原因: YAMLのインデントが間違っている
解決: 半角スペース2つまたは4つで統一し、タブ文字を使わない
ポート競合エラー
症状: Bind for 0.0.0.0:8080 failed: port is already allocated
原因: 指定したポートが既に使用されている
解決: 別のポート番号に変更する
ports:
- "8081:80" # 8080→8081に変更
コンテナが起動しない
症状: コンテナが起動後すぐに停止する
解決手順:
# ログを確認
docker-compose logs
# 特定のサービスのログを詳しく見る
docker-compose logs -f サービス名
エラーメッセージから原因を特定し、設定を修正します。
まとめ
Docker Composeは、複数のコンテナを1つの設定ファイルで管理できる強力なツールです。
この記事で学んだこと:
- Docker Composeの基本概念と導入メリット
- docker-compose.ymlファイルの書き方
- 基本的なコマンドの使い方
- WordPress環境構築の実践例
次のステップ:
- 実際に簡単な環境を構築してみる
- 自社の開発環境をDocker Compose化する
- チームで設定ファイルを共有し、標準化を進める
Docker Composeを活用することで、環境構築の属人化を防ぎ、チーム全体の生産性を向上させることができます。さらに大規模なコンテナ管理が必要な場合はKubernetesの導入も検討してみましょう。まずは小さな環境から始めて、徐々に活用範囲を広げていきましょう。