PHP

DockerでPHP 8.3環境を構築する完全ガイド:インストールからマルチステージビルドまで

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

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

Docker のインストールと前提条件

Docker がローカルで正しく動作すれば、PHP 8.3 環境の構築は OS に依存せず同一手順で行えます。この章では Docker Desktop(または Docker Engine) のインストール方法と、最低限満たすべきシステム要件を解説します。環境が整うことで、以降の PHP コンテナ構築作業がスムーズに進むことを目的としています。

Docker Desktop(または Docker Engine)のインストール手順

以下では主要な OS 別にインストーラ取得からバージョン確認までの流れを示します。各ステップは公式サイトの指示に従うだけで完了するため、初心者でも安心です。

  1. Windows
  2. 対象: Windows 10 Pro/Enterprise(Build 1903 以上)または Windows 11
  3. 手順: Docker Desktop のインストーラを公式サイトからダウンロードし実行。インストール中に Hyper‑VWSL2 の有効化が求められます。
  4. macOS
  5. 対象: macOS Ventura 以降(Intel/Apple Silicon 両方対応)
  6. 手順: Docker Desktop for Mac をダウンロードし、ドラッグ&ドロップでアプリケーションフォルダーに移動。起動時に自動的に必要な仮想化コンポーネントがセットアップされます。
  7. Linux(Ubuntu 22.04 LTS や CentOS Stream 9 を例示)
  8. 手順: 公式リポジトリを追加したうえで apt(Ubuntu 系)または dnf(CentOS 系)を使い docker-ce パッケージをインストールします。

インストールが完了したら、ターミナル/PowerShell で以下を実行しバージョン情報が表示されれば成功です。

対応 OS とシステム要件

Docker が安定して動作するために最低限必要なハードウェア・ファームウェア構成は次の通りです。CPU コア数やメモリは推奨値を満たすほど快適に利用できます

項目 推奨環境
CPU 2 コア以上(4 コア推奨)
メモリ 4 GB 以上(8 GB 推奨)
ストレージ 空き容量 10 GB 以上
仮想化サポート BIOS/UEFI で VT‑x / AMD‑V を有効化

上記要件を満たせば、Docker Desktop のインストール直後に docker compose が利用可能です。


公式 PHP 8.3 イメージの選定とタグの説明

PHP の公式イメージは Docker Hub の php リポジトリで管理されており、定期的にセキュリティパッチやバグ修正が提供されます。この章では 開発向き本番向き のタグ選択基準と、代表的なイメージの違いを解説します。

php:8.3‑fpm と php:8.3‑cli の違い

php:8.3-fpm は FastCGI Process Manager が組み込まれた Web 用ランタイムです。一方 php:8.3-cli はコマンドライン実行専用で、Composer やテストスクリプトの実行に適しています。開発環境では両方を併用し、FPM コンテナがリクエスト処理を担当し、CLI コンテナがビルドやユニットテストを実行 する構成が一般的です。

アルパイン vs デビアンベースの選択基準

タグ 主な特徴 推奨シーン
php:8.3-fpm-alpine イメージサイズが約 30 MB と非常に小さく、脆弱性リスクも低い。パッケージ管理は apk 開発・本番共に 軽量化 が最優先の場合。
php:8.3-fpm-bullseye Debian Bullseye ベースで apt が利用可能。拡張モジュールのインストールが容易。 多数の PHP 拡張(例:gd、intl)を追加したい場合や、Alpine ではビルドが困難な PECL パッケージが必要なケース。

⚠️ 注意
本稿で示したイメージサイズ(30 MB/70 MB)は執筆時点の概算です。将来的にベースイメージやパッケージ構成が変更されると、実際のサイズは増減します。また、php:8.3 系タグは随時マイナーバージョン(例:8.3.12)へ更新されるため、バージョン情報は docker pull php:8.3-fpm-alpine 時点での最新ものが取得されます。運用環境では特定バージョンを固定するタグ(例:php:8.3.12-fpm-alpine)の使用も検討してください。


Dockerfile とマルチステージビルドで最小構成を作る

マルチステージビルドは 開発ツールと本番イメージを分離 でき、不要なファイルやビルド時依存を除外することで軽量かつ安全なコンテナが得られます。この章では「開発ステージ」「本番ステージ」の2段階構成例と、よく使う拡張モジュールのインストール方法を紹介します。

Dockerfile の基本構造

以下は Alpine ベースで作るマルチステージビルドのサンプルです。コメントで各ステップの目的を明示しています。

この構成でビルドすると、本番イメージは約 40 MB(執筆時点)に圧縮されます。実際のサイズはベースイメージやインストールした拡張によって変動するため、docker images コマンドで確認してください。

必要な拡張モジュールと Composer のインストール例

  • zip :Composer が依存パッケージを取得する際に必須。
  • pdo_mysql :MySQL / MariaDB への接続を提供。
  • xdebug (開発ステージのみ):デバッグやコードカバレッジ測定に使用。

プロジェクト固有の要件がある場合は、apk adddocker-php-ext-install の行に追記してください。また、.dockerignore.git/, tests/, README.md など不要なファイルを列挙すると、ビルド時にコピーされるデータ量が減りさらに軽量化できます。


docker‑compose.yml における php-fpm と Web サーバーの定義

Docker Compose を利用すれば、PHP コンテナと Nginx(または Apache)コンテナをワンコマンドで起動できます。この章では php-fpmnginx:alpine の連携例を示し、ボリュームマウントや環境変数の扱い方も解説します。

php-fpm と nginx サービスの設定例

以下の docker-compose.yml は、先ほど作成したマルチステージイメージを本番ステージ(target: production)として利用し、ローカルディレクトリをリアルタイムで反映させる構成です。

nginx の設定ファイル(nginx/default.conf

この設定により、docker compose up -dNginx がホストの 8080 ポート にバインドし、src ディレクトリを共有することでコード変更が即座にコンテナ内へ反映されます。

ソースコードのボリュームマウントとホットリロード

  • ボリューム./src:/app によってローカルディレクトリとコンテナ内部を同期させ、ファイル更新時に自動的に読み込まれます。
  • OPcache の有効化:開発環境でもキャッシュが影響しないよう .envOPCACHE_VALIDATE_TIMESTAMPS=1 を設定すれば、変更検知が可能です。

環境変数・PHP 設定ファイルのカスタマイズとコンテナ起動手順

環境ごとの差分は .env ファイルにまとめて管理すると、コードベースから機密情報やポート番号を切り離せます。また、php.ini の上書きはボリュームマッピングで簡単に実現できます。

.env ファイルで管理する設定例

プロジェクトルートに .env を作成し、Compose が自動的に読み込みます。

docker-compose.yml では ${変数名} の形で参照できます。

コンテナ起動と PHP バージョン確認手順

設定が整ったら、以下のコマンドでバックグラウンド起動します。

起動後に PHP のバージョンを確認する例です。$(docker ps -qf "name=php") は php サービスのコンテナ ID を取得します。

バージョンが 8.3 系 と表示されれば、環境構築は完了です。


トラブルシューティングと本番環境向け最適化

Docker と PHP の組み合わせでよく遭遇する問題と、その対処法をまとめました。初心者がハマりやすいポイントを中心に、本番環境でのベストプラクティス も併せて紹介します。

権限エラー・ポート競合・Xdebug 設定の対処法

症状 主な原因 解決策
Permission denied(ファイル書き込み) ホスト側ディレクトリが root 権限で作成されている docker-compose exec php chown -R www-data:www-data /app もしくは compose に user: "${UID}:${GID}" を追加
ポート 8080 がすでに使用中 他のローカルサーバーや過去のコンテナが同ポートを占有 .envNGINX_HOST_PORT を別番号(例: 8081)に変更し、compose 再起動
Xdebug が有効にならない xdebug.mode が未設定、または php.ini が上書きされていない コンテナ内で echo 'zend_extension=xdebug.so' >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini && echo 'xdebug.mode=debug,develop' >> ... を実行し再起動

本番向けイメージ最適化のポイント

  1. 開発ツールは除外
  2. composer install --no-devapk del $PHPIZE_DEPS を本番ステージで実行してサイズを削減。
  3. 不要ファイルの削除
  4. .dockerignore.git/, tests/, README.md などを書き込み、ビルド時にコピーされないようにする。
  5. 最小権限で実行
  6. Dockerfile の最後に USER www-data を追加し、コンテナ内プロセスが root で走らないように設定。
  7. OPcache と PHP‑FPM のチューニング
  8. 本番環境では opcache.memory_consumption=128, pm.max_children=10 などを php.ini に記述し、リソース使用率と応答速度のバランスを最適化。

⚠️ 注意
本稿で示した「約 40 MB 以下」のイメージサイズは、Alpine ベースかつビルドツール・開発用拡張を除外した場合 の目安です。実際の運用環境では追加パッケージやカスタム設定に応じてサイズが変動します。定期的に docker images でサイズを確認し、不要な層が残っていないかチェックしてください。

これらのベストプラクティスを取り入れることで、開発時は柔軟性・デバッグ機能を活用しつつ、本番環境では軽量かつ高速にデプロイできる PHP 8.3 コンテナが実現します。

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-PHP