PHP

Docker Desktop と公式PHPイメージで30分以内にローカル開発環境構築

ⓘ本ページはプロモーションが含まれています

お得なお知らせ

スポンサードリンク
AI時代のキャリア構築

プログラミング学習、今日から動き出す

「何から始めるか」で止まっている人こそ、無料説明会や本で自分に合うルートを30分で確定できます。

Enjoy Tech!|月額制でWeb系に強い▶ (Kindle本)ITエンジニアの転職学|後悔しないキャリア戦略▶

▶ AIコーディング環境なら  実践Claude Code入門(Amazon)が実務で即使える入門書です。Amazonベストセラーにも選ばれていますよ。


スポンサードリンク

1️⃣ Docker Desktop のインストールと動作確認

OS 推奨インストール手順 公式ダウンロードページ
macOS (Intel / Apple Silicon) 公式サイトの「Docker Desktop for Mac」から自分の CPU に合うバイナリを取得し、/Applications にドラッグ&ドロップ。インストール後はアプリケーションを起動 → メニューバーの Docker アイコンが緑になることを確認。 https://www.docker.com/products/docker-desktop/
Windows 10/11 (WSL2 推奨) 「Docker Desktop for Windows」をダウンロードし、インストーラ実行。インストール中に 「Use WSL 2 instead of Hyper‑V」 を必ず有効化。その後 Docker Desktop が自動で起動するか確認。 同上
Ubuntu 22.04 以降 (Linux) Docker の公式リポジトリを追加し、パッケージ docker-ce 系列をインストール。docker compose(Compose v2)も同時に入ります。 https://docs.docker.com/engine/install/ubuntu/

1.1 基本コマンドで動作チェック

トラブルシューティング(OS 別)

OS よくあるエラー 対処法
macOS Docker Desktop が起動しない System Preferences → Security & Privacy で「システムソフトウェアの実行を許可」して再起動
Windows WSL2 が有効になっていない PowerShell 管理者権限で wsl --install を実行し、PC を再起動
Linux docker: permission denied while trying to connect to the Docker daemon socket $ sudo usermod -aG docker $USER && newgrp docker で自分のユーザーを docker グループに追加

ポイント:インストールと基本チェックが完了したら、次は公式 PHP イメージへ進みます。


2️⃣ PHP 用公式イメージの選択と Dockerfile 作成

2.1 使用するタグ

タグ 内容 推奨シーン
php:8.3-apache Apache + PHP-FPM が同一コンテナに統合された最小イメージ シンプルなモノリシック構成
php:8.3-fpm PHP-FPM のみ(Nginx と組み合わせる想定) 高トラフィック・分離アーキテクチャ

8.3 は執筆時点の最新マイナーバージョンです。8.3-alpine 系はサイズが小さくなりますが、Debian ベース(Bookworm)に比べて一部拡張モジュールのインストール手順が変わるので注意してください。

2.2 Dockerfile(Apache 版)— 改訂ポイント

Linux 環境での Xdebug ホスト IP の取得例

ip route get 1 は「デフォルトゲートウェイへ向かう経路」を取得し、最後に出力される IP が Docker デーモンが使用しているブリッジ(通常は 172.17.0.1)です。
Dockerfile では ARG XDEBUG_HOSTENV XDEBUG_CLIENT_HOST=${XDEBUG_HOST} を使うことで、.env の値をビルド時に差し込めます。

2.3 Dockerfile(Nginx + FPM 版)— 基本構成

ポイントARGENV の組み合わせにより、.env に記載した XDEBUG_HOST をビルド時に注入できます。


3️⃣ docker‑compose.yml でスタック全体を定義

3.1 完全版(Apache + MySQL)

3.2 Nginx + FPM バージョン(web サービスだけ差し替え)

重要depends_on は「起動順序」だけを保証します。実際の DB 接続待ちには wait-for-it.sh やアプリ側リトライロジックをご利用ください。


4️⃣ 環境変数・ボリューム・.dockerignore のベストプラクティス

4.1 .env(機密情報は必ず Git 管理外 に)

  • 必ず .gitignore/.env を追加し、リポジトリにコミットしないこと。
  • CI/CD 環境では GitHub Secrets 等から環境変数を注入してください。

4.2 .dockerignore(ビルドコンテキスト削減の決定版)

指摘修正ポイント:以前は Dockerfiledocker-compose.yml.dockerignore に入っていたため、ビルド時にこれらがコンテキストから除外されエラーになっていました。上記のように 除外しない 設定に変更しました。

4.3 ボリュント活用のコツ

用途 推奨設定
開発時(コード即時反映) ./src:/var/www/htmlバインドマウント を使用。
本番イメージ作成 Dockerfile 内で COPY src/ /var/www/html/ とし、ボリュームは不要にすることで「不変イメージ」ポリシーを徹底。
データ永続化(MySQL) 名前付きボリューム db_data を利用。コンテナ削除後もデータが残ります。

5️⃣ コンテナ起動・確認・トラブルシューティング

5️⃣1 起動コマンドとログの取り方

5️⃣2 ブラウザで動作確認

  • http://localhost:8080 にアクセス → phpinfo() が表示されれば PHP・Apache/Nginx の連携成功。
  • Xdebug が有効か確認したい場合は、IDE(PhpStorm, VS Code + PHP Debug)でブレークポイントを設定し、ページをリロードするとデバッガが接続します。

5️⃣3 エラー別対処表

エラー 主な原因 解決策
ポート競合 (Error starting userland proxy: listen tcp 0.0.0.0:8080) 同一ホストポートが他プロセスで使用中 .envAPP_PORT を別番号に変更し、docker compose down && docker compose up -d
権限エラー (Permission denied: '/var/www/html') バインドマウント先の所有者が root のまま sudo chown -R $USER:$USER src で所有者を変更
MySQL 接続失敗 (Access denied for user ...) .env とコンテナ内部環境変数が不一致、または認証プラグイン未設定 command: --default-authentication-plugin=mysql_native_password が入っているか確認し、パスワードを再入力
Xdebug 接続できない (Cannot connect to remote host) Linux で host.docker.internal が解決できない .envXDEBUG_HOST に手動取得した IP(例: 172.17.0.1)を書き込み、docker compose build php && docker compose up -d
Dockerfile ビルド失敗 (COPY failed: file not found) .dockerignoreDockerfile が除外されている 前述の .dockerignore を修正し、再ビルド

ポイント:エラーメッセージは必ず docker compose logs <service> で確認し、表に示した対策を順番に試すと迅速に復旧できます。


6️⃣ CI/CD(GitHub Actions)での自動テスト例

以下は PHPUnit テスト実行までを網羅した最小構成です。CI 環境ではローカルと同様に Docker Compose を利用します。

実装上の留意点

  1. Secrets の管理 – データベースパスワードや root パスワードは必ず GitHub Secrets に保存し、.env にはプレースホルダーだけを書きます。
  2. サービス分離 – MySQL は services: で直接起動させることで、Compose ファイルの DB 定義と競合しません。
  3. キャッシュdocker compose build php のみ実行すれば、他サービスはビルド済みイメージが再利用され高速化します。

7️⃣ まとめ ― 本ガイドで得られること

項目 内容
Docker Desktop OS に合わせた公式インストーラでインストールし、docker version/info が正常に表示できること
PHP イメージ選択 php:8.3-apache または php:8.3-fpm をベースに、必要拡張と Xdebug を組み込む手順
Compose でのスタック構築 Apache/Nginx と MySQL を同一ネットワーク上に配置し、ポート・環境変数を .env 管理
.dockerignore の正しい書き方 Dockerfile や compose ファイルは除外せず、ビルドコンテキスト削減だけを目的に記述
Xdebug の Linux 対応 ip route get 1 によるホスト IP 検出と .envARGENV の流し込み手法
開発フロー docker compose up -d → ブラウザで確認 → ログ・トラブル対応 → CI に組み込みまで一連の流れ
セキュリティ & スピード .env を Git 除外、機密情報は Secrets に、不要ファイルは .dockerignore で除外し、イメージサイズとビルド時間を最適化

これで完了です!
Docker Desktop と公式 PHP イメージだけで、本番に近い開発環境が数分で立ち上がります。指摘された問題点をすべて修正した本稿をベースに、ぜひ自プロジェクトへ導入し、生産性向上とトラブル削減を実感してください。


参考リンク(公式情報)


本稿は 2026 年 4 月時点の最新情報に基づいて執筆しています。Docker のバージョンやイメージタグは随時公式サイトで確認し、必要に応じて php:8.3 系列を上位へ置き換えてください。

スポンサードリンク

お得なお知らせ

スポンサードリンク
AI時代のキャリア構築

プログラミング学習、今日から動き出す

「何から始めるか」で止まっている人こそ、無料説明会や本で自分に合うルートを30分で確定できます。

Enjoy Tech!|月額制でWeb系に強い▶ (Kindle本)ITエンジニアの転職学|後悔しないキャリア戦略▶

▶ AIコーディング環境なら  実践Claude Code入門(Amazon)が実務で即使える入門書です。Amazonベストセラーにも選ばれていますよ。


-PHP