Happy Web Engineer
Last updated on

はじめてのDocker Compose|誰でもできる開発環境の作り方


はじめに

Webアプリやサービスを開発するとき、多くの人が最初にぶつかる壁が「開発環境の構築」です。
「MySQLを入れたけどバージョンが違って動かない…」
「チームメンバーと同じ環境に合わせるのに何時間もかかった…」
こんな経験はありませんか?

そこで役立つのが Docker Compose です。Dockerを使えばアプリをコンテナとして動かせますが、Composeを使えば「複数のコンテナ」をまとめて管理できるようになります。
この記事では、初心者でもわかるように DockerとDocker Composeの違い から、基本の使い方、さらに実践的なベストプラクティスまで解説していきます。


DockerとDocker Composeの違い

まず混乱しやすい「Docker」と「Docker Compose」の違いから整理しましょう。

Dockerとは?

Dockerは、アプリケーションを「コンテナ」として動かす仕組みです。
例えば、MySQLを起動する場合は次のように実行します。

docker run -d mysql:8

これでMySQLコンテナが立ち上がります。
ただし、この方法だと「Nginx + PHP + MySQL」を同時に立ち上げるような構成はとても面倒です。毎回コマンドを叩く必要がありますし、設定の共有も難しくなります。

Docker Composeとは?

そこで登場するのがDocker Composeです。
docker-compose.yml というファイルに「使うコンテナの一覧や設定」を書いておけば、次の1コマンドで全部を起動できます。

docker compose up -d

イメージすると、Dockerは「単品で注文する」感覚、Docker Composeは「セットメニューで全部まとめて出てくる」感覚です。


Docker Composeを使うメリット

  • 環境をコードで共有できる
    docker-compose.yml を渡せば、誰でも同じ環境を再現可能。
  • 起動・停止が簡単
    updown の2コマンドで完結。
  • 複数のサービスをまとめて管理できる
    → Webサーバー、DB、キャッシュ、フロントエンドを一括で起動。
  • 本番環境にも応用しやすい
    → Docker Composeで定義した構成をそのままクラウドに移行できる。

Docker Composeの基本

インストール確認

Docker Desktopをインストールしているなら、Composeも同梱されています。

docker compose version

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

最小構成のdocker-compose.yml

試しにNginxとMySQLを同時に起動してみましょう。

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

  db:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: root

保存したら以下を実行します。

docker compose up -d

これだけでNginxとMySQLが同時に立ち上がります。


よく使うオプションとベストプラクティス

環境変数を外部化

APIキーやパスワードは .env にまとめて管理しましょう。

environment:
  MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}

データを永続化

ボリュームを指定することで、コンテナを消してもデータが残ります。

volumes:
  - db-data:/var/lib/mysql

起動順序を制御

DB → Webアプリの順で起動したい場合は depends_on を利用します。

depends_on:
  - db

開発用と本番用を分ける

開発ではホットリロード、本番ではキャッシュ強化など、用途ごとに docker-compose.override.yml を用意するのが便利です。


実践例:Laravel開発環境

LaravelアプリをDocker Composeで動かす例を紹介します。

version: "3"
services:
  app:
    build: .
    volumes:
      - .:/var/www/html
    depends_on:
      - db
  db:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: laravel
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    ports:
      - "8081:80"
    environment:
      PMA_HOST: db

これを実行すると、Laravelアプリ、MySQL、phpMyAdminを一度に立ち上げられます。


トラブルシューティング

ポート競合

同じポートを使っている場合は ports: の番号を変更。

MySQL初期化エラー

MYSQL_ROOT_PASSWORD が未設定だとエラーになります。必ず設定しましょう。

権限エラー

MacやLinuxでは、ボリュームマウント時に権限エラーが出ることがあります。
chmod -R 777 storage などで権限を調整しましょう。


まとめ

Docker Composeは「環境構築の時間を節約し、誰でも同じ環境をすぐに再現できる」便利なツールです。

  • 複数コンテナを一括管理できる
  • 設定をコード化できる
  • 開発から本番まで応用できる

エンジニアとしての効率を高める第一歩として、ぜひ使いこなしてみましょう。


関連記事

👉 Dockerを使った開発環境構築の基本ステップ|初心者から始めるコンテナ開発入門
👉 Laravel Sail入門|開発環境をシンプルに整える基本ステップ
👉 GitHubとGitLabどちらを選ぶべき?メリット・デメリット徹底比較|初心者からチーム開発まで対応
👉 Dockerを使った開発環境構築の基本ステップ|初心者から始めるコンテナ開発入門