Contents
DockerによるPHP開発環境構築の概要
Dockerを活用すれば、PHP開発環境のセットアップにかかる時間やバージョン管理の複雑さを大幅に軽減できます。本記事では、DockerとDocker Composeを使用して最小限の設定でPHP開発環境を構築する手順をステップバイステップで解説します。初心者でも簡単に導入できるよう、コピペ可能なコード例も提供しています。
事前準備:Docker/Docker Composeのインストール確認
Docker環境を整える際には、まずDockerとDocker Composeが正常に動作しているか確認することが重要です。OSごとに手順が異なるため、自分の環境に合わせて実施してください。
OSごとの確認手順
以下は各OSでのDockerのインストール・起動状態の確認方法です。
| OS | 手順概要 | 確認コマンド |
|---|---|---|
| Windows | Docker Desktop for Windowsをインストールし、「Docker Engine」と「Docker Compose」が有効か確認 | docker --versiondocker-compose --version |
| macOS | Homebrew経由でDockerをインストール。アプリ起動時に状態を確認 | 同上 |
| Linux(Ubuntu例) | apt-get install -y docker.io docker-compose でインストール |
同上 |
注意: Dockerデーモンの権限設定やホスト側のディレクトリパーミッションが不適切な場合、コンテナ起動時にエラーが発生する可能性があります。
PHP-FPMとNginxコンテナの構築
PHP開発環境の核となるのはphp-fpm(FastCGI Process Manager)とNginx(ウェブサーバー)です。ここでは、最小限の設定でこれらを起動する方法を解説します。
docker-compose.ymlファイルの作成
以下のコード例をdocker-compose.ymlとして保存してください。プロジェクトルートに配置し、コマンド一括で環境構築できます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
version: '3.8' services: webserver: image: nginx:latest ports: - "80:80" volumes: - ./src:/var/www/html - ./nginx.conf:/etc/nginx/nginx.conf depends_on: - php php: image: php:8.2-fpm volumes: - ./src:/var/www/html - ./php.ini:/usr/local/etc/php/php.ini |
パーミッションの注意点
コンテナ起動時に「Permission denied」エラーが発生する場合、ホスト側ディレクトリのパーミッションが原因です。以下を推奨します:
- Dockerデーモンの権限設定を変更(
/etc/docker/daemon.jsonに"userns-remap": "default"を追加) - ホスト側ディレクトリに権限を付与:
sudo chmod -R 775 ./src - 非推奨:
--privilegedオプションはセキュリティリスクがあるため使用しないこと
MySQLとの連携構築
PHPアプリケーションは多くの場合、データベースと接続します。ここではMySQLコンテナを追加し、環境変数経由で接続情報を設定します。
MySQLコンテナのバージョン指定リスク
mysql:8.0とphp:8.2-fpmの組み合わせには互換性リスクがあります。以下は推奨される組み合わせです:
| PHPバージョン | 推奨MySQLバージョン | 補足 |
|---|---|---|
| 8.2 | 8.0 または 5.7(php-mysqlnd対応) | MySQL 8.0ではmysql_native_password認証メソッドが必要 |
| 8.1 | 8.0 | バージョン差異によるエラー回避 |
docker-compose.ymlのMySQLサービス定義
以下をdocker-compose.ymlに追加してください。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: rootpass MYSQL_DATABASE: mydb MYSQL_USER: user MYSQL_PASSWORD: userpass volumes: - ./mysql-data:/var/lib/mysql ports: - "3306:3306" |
環境変数ファイル(.env)の作成と設定
MySQLなどの接続情報を安全に管理するには、.envファイルを作成します。以下は具体的な例です。
.envファイルの具体例
|
1 2 3 4 5 6 |
DB_HOST=db DB_PORT=3306 DB_USER=user DB_PASSWORD=userpass DB_NAME=mydb |
注意: このファイルは
.gitignoreに含め、公開しないようにしてください。
PHPアプリケーション内ではこの環境変数を読み込み、データベース接続の設定を行います。
よくあるエラーとその解決法
Dockerで開発環境を構築する際には、いくつかの典型的な問題に出会うことがあります。以下に代表的なものを紹介します。
ポート衝突時の対処
docker-compose up時にポートが使用されている場合、「Address already in use」といったエラーが出ます。解決方法は以下の通りです。
- 既存のアプリケーションを停止
- 別のポート番号に変更(例:
3000:80)
権限不足時の修正手順
Linux環境では、コンテナ起動時に「Permission denied」エラーが発生することがあります。これはホストのディレクトリパーミッションが原因です。
- ディレクトリに権限を付与(例:
sudo chmod -R 775 ./src) - Dockerデーモンの権限設定変更(
/etc/docker/daemon.json)
環境構築完了後の確認手順
Docker Composeによる環境構築が完了したら、以下の手順で動作を確認してください。
コンテナ起動確認
ターミナルから以下を実行します。
|
1 2 |
docker-compose up -d |
-dオプションによりバックグラウンドで起動されます。サービス状態はdocker psで確認可能です。
まとめ
DockerとDocker Composeを使用することで、PHP開発環境の構築を効率的に行えます。重要なポイントを以下に整理します。
- PHPバージョンとMySQLコンテナとの互換性に注意
--privilegedオプションは非推奨なため使用しない- ホスト側ディレクトリのパーミッションには代替案を検討
.envファイルを具体的に作成し、環境変数で接続情報を管理- エラー対処法や確認手順を事前に把握しておく
以上により、安定した開発環境が構築できます。記事内のサンプルコードを参考に、すぐに導入してください。