【2026年版】Docker完全ガイド|docker-compose+Laravel Sail+トラブル解決|「ローカルで動くのに本番で落ちる」を一発解決
はじめに
Webエンジニアとして開発を進めていくと、必ず直面するのが「環境構築の問題」です。
- 「動くはずのアプリが、自分のPCでは動かない」
- 「チームメンバーの環境ごとにバグが出る」
- 「本番環境とローカル環境で挙動が違う」
こうしたトラブルを解決するために登場したのが Docker です。
この記事では、初心者でも理解できるように、Dockerを使った開発環境構築の基本ステップを解説します。
Dockerとは?
Dockerは「アプリケーションを動かすための環境」をコンテナという単位でまとめ、どこでも同じように実行できる仕組みです。
- 従来の環境構築
PCに直接ソフトをインストールして設定。人によって差が出やすい。 - Dockerの環境構築
環境をコードで定義して、誰でも同じ環境を一瞬で再現できる。
👉 これにより「動かない問題」が劇的に減ります。
Dockerのメリット
- 環境の再現性
どのPCでも同じ環境をすぐに構築できる。 - 軽量で高速
仮想マシンよりも軽く、立ち上げが速い。 - 複数環境を同時に扱える
PHP、Node.js、MySQLなどを同時に実行できる。 - 本番と同じ環境を再現できる
「ローカルでは動くけど本番で動かない」を防げる。
基本用語の理解
- イメージ(Image)
環境の設計図。Ubuntu + PHP + MySQLなどをまとめたもの。 - コンテナ(Container)
イメージを実際に実行したもの。 - Dockerfile
イメージを作るためのレシピ。 - docker-compose.yml
複数のサービス(Webサーバー、DBなど)を一括管理する設定ファイル。
Dockerのインストール
1. Docker Desktopの導入
- Windows/Macの場合:Docker公式サイトから「Docker Desktop」をインストール
- Linuxの場合:パッケージマネージャーでインストール
👉 インストール後、ターミナルで次を実行して確認。
docker --version
基本ステップ:Webアプリ環境を作る
ここでは Nginx + PHP + MySQL の環境を例にします。
1. ディレクトリを作成
mkdir myapp
cd myapp
2. Dockerfileを作成
php 用のDockerfileを用意。
FROM php:8.2-fpm
WORKDIR /var/www/html
👉 PHP環境の基本構成。
3. docker-compose.ymlを作成
version: '3.8'
services:
app:
build: .
volumes:
- .:/var/www/html
ports:
- "9000:9000"
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- .:/var/www/html
- ./nginx.conf:/etc/nginx/conf.d/default.conf
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: myapp
MYSQL_USER: user
MYSQL_PASSWORD: password
ports:
- "3306:3306"
👉 アプリ(PHP)・Webサーバー(Nginx)・DB(MySQL)を一括で管理。
4. Nginxの設定ファイル
nginx.conf を作成。
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass app:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
}
}
5. 起動する
docker-compose up -d --build
👉 ブラウザで http://localhost:8080 にアクセスするとアプリが表示される。
よく使うDockerコマンド
- コンテナ起動:
docker-compose up -d
- コンテナ停止:
docker-compose down
- ログ確認:
docker-compose logs -f
- コンテナに入る:
docker exec -it myapp_app_1 bash
👉 最低限これだけ覚えておけばOK。
初心者がつまずきやすいポイント
- ポートの競合
👉 別のアプリと同じポートを使っていると起動できない。 - ファイル権限の問題
👉 Mac/Linuxでよく発生。権限エラーはchmodやchownで解決。 - ビルドが遅い
👉 キャッシュを活用する、不要な依存関係を減らす。
Dockerを学ぶおすすめ教材
- Progate「Docker入門」
基礎概念を理解するのに最適。 - Udemy「Docker + k8s講座」
実践的なコンテナ開発を体系的に学べる。Udemy講座についてはこちらわかりやすく説明しています。
- 公式ドキュメント
最新情報をキャッチアップ。
Docker Compose 徹底解説
単一コンテナを扱う Docker コマンドに対して、Docker Composeは複数コンテナ(Web+DB+キャッシュ等)をまとめて起動・管理できる仕組みです。実務では Compose を使うのが標準で、個別の docker コマンドを叩くシーンはむしろ少ないです。
Docker と Docker Compose の違い
- Docker:単一コンテナの操作に向く(1つのサービスだけ動かすならこれで十分)
- Docker Compose:複数コンテナを YAMLで記述・一括操作(Webサービス構成の標準)
👉 単体で動かす → Docker / Webサービスとして動かす → Compose、と覚えると分かりやすいです。
Docker Compose を使うメリット
- サービス定義を
docker-compose.yml1ファイルで記述可能 - 環境構築が
docker compose up -dの1コマンドで完了 - 開発環境・ステージング・本番で設定を使い分けやすい
- チーム全員が同じ環境を数分で再現できる
Docker Compose の基本
最小構成の docker-compose.yml は以下のような形です(Nginx + PHP + MySQL構成の例)。
services:
web:
image: nginx:latest
ports:
- "80:80"
depends_on:
- app
app:
build: ./app
volumes:
- ./app:/var/www/html
db:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: secret
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:これだけで Nginx + PHP + MySQL の環境が立ち上がります。
よく使う Compose コマンド
docker compose up -d:バックグラウンドで起動docker compose down:全コンテナ停止・削除docker compose logs -f app:特定サービスのログを追跡docker compose exec app bash:コンテナ内でシェル起動docker compose build --no-cache:キャッシュ無しで再ビルド
ベストプラクティス
- 環境変数は .env ファイルで管理(docker-compose.ymlに直書きしない)
- ボリュームでソースコードをマウント(編集→即反映で開発効率UP)
- depends_on で起動順を制御(DB起動後にアプリ起動 等)
- ネットワークを明示的に定義(複数プロジェクト間の衝突回避)
Laravel Sail — PHP開発者向けDockerラッパー
Laravel プロジェクトを Docker 環境で動かすなら、Laravel Sailを使うのが最も簡単です。SailはLaravel公式が提供するDocker Compose のラッパーで、PHP・MySQL・Redis・Mailhog などWeb開発に必要な一式を1コマンドで構築できます。
Laravel Sail とは?
- Laravel 公式が提供するDocker開発環境ツール
- 内部的には Docker Compose のラッパー(薄い抽象化)
- PHP/Composer をローカルにインストール不要
- Laravel プロジェクト新規作成時に標準で導入可能
Laravel Sail の導入方法
Laravel プロジェクトを新規作成する場合:
curl -s "https://laravel.build/example-app" | bash
cd example-app
./vendor/bin/sail up -d既存プロジェクトに追加する場合:
composer require laravel/sail --dev
php artisan sail:install
./vendor/bin/sail up -dよく使う Sail コマンド
sail up -d:環境起動sail down:環境停止sail artisan ...:Laravel の artisan コマンド実行sail composer ...:composerコマンド実行sail npm ...:Node のnpmコマンド実行sail test:PHPUnitテスト実行sail shell:コンテナ内のシェルに入る
Sail で利用できる主要サービス
- MySQL / PostgreSQL / MariaDB(RDB選択可能)
- Redis / Memcached(キャッシュ)
- Meilisearch / Typesense(検索エンジン)
- Mailhog(メール送信確認)
- MinIO(S3互換ストレージ)
👉 Laravel 開発では自前の docker-compose.yml を書くより、Sailを使うほうが圧倒的に早いです。
実務での活用例
- 開発環境の共有:チーム全員が同じ環境で開発可能
- テスト環境構築:自動テストをDockerで実行
- CI/CDとの連携:GitHub ActionsやGitLab CIと組み合わせて自動デプロイ
👉 「環境構築が一瞬で終わる」ことで、開発スピードが大幅に上がります。
トラブルシューティング集
Docker を使っていて遭遇する典型的な問題と解決法をまとめます。
ポートが既に使われている
エラー: Bind for 0.0.0.0:80 failed: port is already allocated
解決: 既存プロセスを特定して停止、または Compose の ports を別ポートに変更(例: "8080:80")
ボリュームマウントが反映されない
Mac/Windows で特に起こりやすい問題。Docker Desktop の設定でファイル共有が有効か確認し、docker-compose.yml のパスがプロジェクトルートからの相対パスで正しいかチェックしてください。
パーミッションエラーで書き込み不可
Linux ホストで頻発。コンテナ内の UID とホストの UID 不一致が原因。
Dockerfile で USER $UID のような指定を加える、または chown で所有者を調整します。
動作が異常に遅い(Mac/Windows)
Mac/Windows の Docker Desktop は Linux VM 経由で動くため、ホストとコンテナ間のファイル同期がボトルネックになります。
解決: ソースコード以外の node_modules などを volume mount から除外する、Mutagen / docker-sync 等の高速同期ツールを使う。
キャッシュで古いイメージが使われる
docker-compose.yml を修正したのに反映されない場合、以下を試す:
docker compose down
docker compose build --no-cache
docker compose up -dよくある質問(FAQ)
Q. なぜDockerを使うべきなのですか?
「自分のPCでは動くのに本番で動かない」という開発者永年の悩みを根本解決できるからです。Docker を使えば、開発環境・ステージング・本番環境を完全に同一化できるため、「環境依存バグ」が激減します。
Q. 仮想マシン(VirtualBoxなど)とDockerの違いは?
仮想マシンは「ハードウェア仮想化」でOS全体を含むため重い(数GB)。Dockerは「プロセス仮想化」でOSをホストと共有するため軽量(数十MB〜数百MB)で起動も秒単位です。
Q. WindowsでDockerを使う場合の注意点は?
WSL2(Windows Subsystem for Linux 2)上で動かすのが推奨です。Docker Desktopのインストール時に WSL2 統合を有効化してください。ファイルシステムの性能向上とLinuxとの互換性が得られます。
Q. 本番環境でもDockerは使えますか?
はい、むしろ現代のWeb本番環境では標準です。Kubernetes・AWS ECS・Google Cloud Run・Fly.io など、Dockerコンテナを本番で動かすプラットフォームが豊富にあります。開発環境と本番環境の構成を揃えやすいのが最大のメリットです。
Q. Laravel Sailと自前のdocker-compose.ymlどちらを使うべき?
Laravelプロジェクトなら 基本Sailで十分です。独自の環境構成が必要な場合のみ自前のdocker-compose.ymlを書きましょう。Sailは「学習コスト最小・初速最速」で、カスタマイズは Sail からの発展形としてあとから学べます。
まとめ
- Dockerは 「動かない問題」を解決する環境構築ツール
- メリット:再現性・軽量・本番と同じ環境
- 基本ステップ:Dockerfile → docker-compose.yml → 起動
- 実務では開発・テスト・本番運用すべてに活用できる
👉 Webエンジニアを目指すなら、Dockerは避けて通れないスキルです。
関連記事
👉 個人開発・副業に最適なサーバー完全ガイド
👉 【2026年版】Node.jsが動くレンタルサーバー比較
👉 【2026年版】Webフレームワーク選び完全ガイド
👉 【2026年版】プログラミング言語選び完全ガイド
👉 【2026年版】エンジニア学習リソース完全ガイド