
はじめての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
を渡せば、誰でも同じ環境を再現可能。 - 起動・停止が簡単
→up
とdown
の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を使った開発環境構築の基本ステップ|初心者から始めるコンテナ開発入門