🚀 はじめに

この記事でわかること

  • Docker Composeとは何か(一言で:複数のコンテナをまとめて管理するための仕組み)
  • なぜ必要か(手作業の複雑さをYAMLの設定1つでシンプルに)
  • 使わないとどうなるか(起動順や設定のばらつきで毎回つまずきがち
  • 5分で体験できるサンプル(WordPress + MySQLを一発起動)

こんな人向け

  • 中学生〜大人まで、IT知識がほとんどない
  • Dockerは聞いたことあるけど、Composeって何?」をやさしく知りたい人
  • 具体的なイメージ最初の一歩を掴みたい人

初心者でも安心な理由

  • 難しい言葉を身近なたとえで説明
  • 動く手順をそのまま掲載(コピペでOK)
  • 用語のつまずきどころは注意書きでフォロー

✅ 概要解説

Docker Composeとは何か

たとえるなら、電源タップ+リモコン
Webサーバー・データベースなど複数の家電(コンテナ)1つのタップ(YAML) に挿して、ボタン1つ(コマンド1回)でまとめてオン/オフできます。

  • Docker:アプリを小さな箱(コンテナ)として動かす技術
  • Compose:その複数の箱の並べ方つなぎ方(ネットワーク・共有データ・起動順など)をYAMLファイル1枚に書いて、一括で操作する仕組み
Docker Composeのイメージ(複数コンテナを1つの設定で制御)

何のためにあるのか

  • 手順を“設定”に変える:人が毎回打つコマンドを、YAMLに宣言して自動化
  • 一貫性:同じcompose.yamlがあれば、誰のPCでも同じ環境が再現
  • 一括操作起動・停止・ログ確認など、まとめて扱える
  • 開発効率:Web+DBなどよくある組み合わせ1分で用意

Docker Composeがないとどうなる?

  • それぞれのコンテナに対して
    • イメージ選び、ポート、環境変数、ボリューム、ネットワーク…を毎回手で指定
    • 起動順のミス(DBより先にアプリが上がってエラー)
    • チームで環境が微妙に違う(“自分のPCでは動く”問題)

Composeなら:書くのは一度回すのは何度でも。失敗しにくく、説明書いらず

どんな場面で使える?

  • ローカル開発:Webアプリ+DB+キャッシュを一発起動
  • 学習用の検証:OSS(WordPress、PostgreSQL、Redis…)のお試しが簡単
  • 自動テスト(CI):テストの前に依存サービスを一式立ち上げ
  • 小規模運用:個人サーバーやデモ環境の簡易オーケストレーション

🧪 5分で体験:WordPress + MySQL を一発起動

“実際に動いた”体験がいちばん速い理解です。

1) フォルダとファイルを用意

プロジェクト用フォルダを作り、compose.yaml という名前で保存します(推奨名)。

mkdir my-wp && cd my-wp
# このフォルダに compose.yaml を作成

メモdocker-compose.ymlという古い名前でも動きますが、今は compose.yaml が推奨です。

2) compose.yaml の中身(コピペOK)

services:
  db:
    image: mysql:8.0
    restart: unless-stopped
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wp
      MYSQL_PASSWORD: secretpw
      MYSQL_ROOT_PASSWORD: rootpw
    volumes:
      - db_data:/var/lib/mysql
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "-u", "root", "-prootpw"]
      interval: 5s
      timeout: 3s
      retries: 10

  wordpress:
    image: wordpress:latest
    depends_on:
      db:
        condition: service_healthy
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wp
      WORDPRESS_DB_PASSWORD: secretpw
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wp_data:/var/www/html
    restart: unless-stopped

volumes:
  db_data:
  wp_data:

ポイントだけ超ざっくり

  • services: 起動したいコンテナの一覧(ここではdbwordpress
  • environment: コンテナに渡す設定(パスワードなど)
  • ports: 外(あなたのPC)と中(コンテナ) の通信をつなぐ
  • volumes: データを消えにくく保管(コンテナを消しても残せる)
  • depends_on.condition: service_healthy: DBの準備ができてからWordPressを起動

注意:YAMLはインデント(スペース)命タブは使わないでください。

3) 起動→アクセス→停止

# 1. 起動(初回はイメージを自動ダウンロード)
docker compose up -d

# 2. 動作確認(一覧表示)
docker compose ps

# 3. ブラウザで開く
# http://localhost:8080 にアクセス → WordPressの初期セットアップ画面が出れば成功!

# 4. ログも見られます(終了は Ctrl + C)
docker compose logs -f db

# 5. 片付け(-v でボリュームも削除:データ完全消去)
docker compose down -v

小ワザ-d はバックグラウンド起動。迷ったら docker compose --help をどうぞ。


🔍 Composeの“見取り図”を頭に入れる

┌─────────────────────────────┐
│           compose.yaml        │  ← 設定書(何を、どうつなぐか)
├───────────┬───────────────┤
│  service: db  │  service: wordpress │  ← コンテナの箱
│  (MySQL)      │  (PHP + Apache)     │
│               │  ┌──────────────┐  │
│   ┌────────┐ │  │ port 8080:80 │  │  ← ポート公開
│   │volume   │─┘  └──────────────┘  │
│   │db_data  │      ↑                │
│   └────────┘   depends_on: db      │  ← 起動順の関係
└───────┬─────────────┴───────┘
     volumes:
       db_data, wp_data         ← しっかり保存する場所

💡 小話・豆知識・逸話

  1. docker composedocker-compose の違い
    昔はハイフン付きのdocker-compose(別プログラム)でしたが、今は docker compose(スペース) が主流。Docker本体の公式プラグインになり、インストール無しで使える環境が増えました。古い記事で見かけるハイフン版もまだ動くことがありますが、新しい書き方をおすすめします。

  2. compose.yaml が推奨
    docker-compose.ymlという名前でも動きますが、公式のCompose仕様では compose.yaml を推しています。迷ったらこれ。

  3. depends_onは“準備OK”まで待つ?
    単にdepends_on: [db]だと“起動を始める順番”しか保証しません。
    本当に準備ができたかを見るなら、上の例のように healthcheck + condition: service_healthy が安心。

  4. .envで秘密や共通設定を分離
    compose.yamlに直接パスワードを書かず、.envファイルに分けるとキレイ&安全性UP。
    例:DB_PASSWORD=${DB_PASSWORD} のように置き換えできます。

  5. プロファイル(profiles)でON/OFF
    開発だけで使うツール(MailHogなど)はプロファイルで切替。

services:
  mail:
    image: mailhog/mailhog
    ports: ["8025:8025"]
    profiles: ["dev"]
# devプロファイルを有効にして起動
docker compose --profile dev up -d
  1. ボリューム vs バインドマウント
  • ボリューム:データ保管に向く(コンテナと分離して管理)
  • バインド:ローカルのフォルダをそのままマウント(コード編集の即時反映に便利)
  1. “仕様”は1つに統合
    昔はversion: "3"などがありましたが、今はCompose Specification集約されました。versionキーは基本不要で、services:から書き始めます。

覚えておくと安心:困ったら公式ドキュメントの「Compose file reference」を見るのが最短ルートです。


📚 参考リンク

公式サイト・ドキュメント

Wikipedia


🛠️ 関連テーマ・次に理解すると良いこと


🎯 まとめ

  • Docker Compose=“複数コンテナの電源タップ+リモコン”。YAML1枚で一括起動・停止できる。
  • ない場合は手順が人依存ミス増。Composeなら再現性効率が大幅に上がる。
  • 最初の一歩は、この記事のWordPress + MySQLを動かすだけでOK。
  • 実務ではhealthcheck.envprofilesを覚えると一気に安定便利
  • 次の学びはDocker基礎→Dockerfile→CI/CD→Kubernetesへと段階的に拡張

補足(よくあるつまずき)

  • ポートが使えない:すでに8080を使うアプリがいるかも。"8081:80"などに変更。
  • パスワードを忘れたcompose.yamlの値を修正→docker compose down -vup -dで作り直し。
  • タブ混入:YAMLはスペースのみ。エディタの表示記号をONにすると発見しやすい。
  • Windowsの改行差:基本はOKですが、.envの末尾スペースや全角記号に注意。