章: 第5章: より本格的な環境
対象OS: Windows / Mac 共通(差異は各セクションに記載)
「私の環境では動くのに」—— この問題をなくすのがDocker
チーム開発で一番困るのが「自分のPCでは動くのに、他の人の環境では動かない」という状況です。PHPのバージョン違い、php.ini の設定差異、OSの違いなど、原因は多岐にわたります。
DockerはPHPのバージョン・設定・依存ツールをすべてコードで定義します。 docker compose up 1コマンドで、誰の環境でも同じ構成が立ち上がります。
Dockerのインストール
### Windowsの場合
1. [https://www.docker.com/products/docker-desktop/](https://www.docker.com/products/docker-desktop/) から「Docker Desktop for Windows」をダウンロード
2. インストーラーを実行(WSL2バックエンドを使用するオプションを選択)
3. インストール後、PCを再起動
4. Docker Desktopを起動して確認:
docker --version
docker compose version
注意: Windows版DockerはWSL2を必要とします。WSL2が未インストールの場合は先に第08回の手順で導入してください。
### Macの場合
1. [https://www.docker.com/products/docker-desktop/](https://www.docker.com/products/docker-desktop/) から「Docker Desktop for Mac」をダウンロード
– Apple Silicon(M1/M2/M3)の場合は「Mac with Apple chip」を選択
– Intel Macの場合は「Mac with Intel chip」を選択
2. .dmg ファイルを開き、Docker.appをApplicationsにドラッグ
3. Docker Desktopを起動して確認:
docker --version
docker compose version
PHP + Apacheのシンプルな構成
まずプロジェクトフォルダを作成します:
myproject/
├── docker-compose.yml
├── php.ini
└── public/
└── index.php
### docker-compose.yml
services:
web:
image: php:8.2-apache
ports:
- "8080:80"
volumes:
- ./public:/var/www/html
- ./php.ini:/usr/local/etc/php/conf.d/custom.ini
### php.ini
display_errors = On
error_reporting = E_ALL
### public/index.php
<?php
echo '<h1>Hello from Docker!</h1>';
phpinfo();
起動と確認
# プロジェクトフォルダに移動
cd myproject
# コンテナを起動
docker compose up -d
# ブラウザで確認
# https://phpl4b.com/
-d オプションをつけるとバックグラウンドで起動します。停止するときは:
docker compose down
MySQLを追加する構成
データベースが必要な場合は docker-compose.yml にMySQLサービスを追加します:
services:
web:
image: php:8.2-apache
ports:
- "8080:80"
volumes:
- ./public:/var/www/html
depends_on:
- db
environment:
DB_HOST: db
DB_NAME: mydb
DB_USER: user
DB_PASSWORD: password
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: mydb
MYSQL_USER: user
MYSQL_PASSWORD: password
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
PHPからMySQLに接続する場合、php-mysqli または php-pdo_mysql 拡張が必要です。カスタムDockerfileで追加できます:
# Dockerfile
FROM php:8.2-apache
RUN docker-php-ext-install mysqli pdo pdo_mysql
docker-compose.yml でイメージの代わりにDockerfileを指定:
services:
web:
build: .
ports:
- "8080:80"
volumes:
- ./public:/var/www/html
WindowsとMacの差異まとめ
| 項目 | Windows | Mac |
| Docker Desktopの入手先 | 同じページ、「for Windows」を選択 | 同じページ、チップに合わせて選択 |
| バックエンド | WSL2(必須) | HyperKit(Intel)/ Virtualization.framework(Apple Silicon) |
| パフォーマンス | WSL2上のファイルなら良好 | 標準的に良好 |
| ファイルマウント | /mnt/c/ 経由は遅いのでWSL2内に置く |
~/ 以下であれば問題なし |
localhost でのアクセス |
そのまま https://phpl4b.com/ |
そのまま https://phpl4b.com/ |
Windowsでのパフォーマンス注意: プロジェクトファイルを
C:\Users\以下ではなく、WSL2内の~/以下に置くことでDockerのファイルマウントが高速になります。
コンテナログの確認
動作がおかしい場合はログで原因を確認します:
# 全サービスのログ
docker compose logs
# webサービスのみリアルタイムで表示
docker compose logs -f web
まとめ & 次のステップ
- DockerはPHP環境をコードで定義し、どのPCでも同じ状態を再現できる
docker-compose.ymlのservicesにPHPとMySQLを定義して起動する- WindowsはWSL2が必要、MacはDocker Desktopをインストールするだけ
- ファイルをWSL2/Mac側に置くとマウントのパフォーマンスが向上する
次回は「よくあるエラーとトラブルシューティング」を解説します。環境構築でつまずきやすいエラーとその解決策を、OS別にまとめます。