プロジェクトの構成
以下環境が必要となったのでWSL+Docker上に手っ取り早く環境作成。(Gemini活用で)
・PHP 8.3.32
・MySQL 5.5
・phpMyAdmin
作業用のフォルダ(例: my-app)を作成し、内部を以下のような構成にする。
my-app/
├── docker-compose.yml
├── docker/
│ └── php/
│ └── Dockerfile
└── src/
└── index.php
これらのフォルダはWSL上に作成する。
WindowsからWSLのフォルダにアクセスするには、エクスプローラーのアドレスバーに以下を入力する。
\\wsl$\
または
\\wsl.localhost\
各設定ファイルの作成
1. docker/php/Dockerfile
PHP 8.3.32(公式イメージ php:8.3.32-fpm)をベースとし、MySQL接続用の拡張機能(pdo_mysql / mysqli)を有効化する。
FROM php:8.3.32-fpm
# パッケージの更新と必要な依存関係のインストール
RUN apt-get update && apt-get install -y \
libzip-dev \
unzip \
&& rm -rf /var/lib/apt/lists/*
# MySQL接続用拡張機能のインストール
RUN docker-php-ext-install pdo_mysql mysqli
2. docker-compose.yml
全コンテナの定義とネットワーク設定を記述します。MySQL 5.5 では古い暗号化方式(old_passwords=0)を維持するオプションを指定。
services:
# PHP App Server
app:
build:
context: .
dockerfile: docker/php/Dockerfile
container_name: php_app
volumes:
- ./src:/var/www/html
ports:
- "8000:8000"
# ビルドインサーバーで動作確認用(Nginx等を挟まない場合)
command: php -S 0.0.0.0:8000 -t /var/www/html
# MySQL 5.5 Database Server
db:
image: mysql:5.5
container_name: mysql_db
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: my_database
MYSQL_USER: my_user
MYSQL_PASSWORD: my_password
ports:
- "3306:3306"
volumes:
- db_data:/var/lib/mysql
# MySQL 5.5向け初期化パラメータ
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --old_passwords=0
# phpMyAdmin
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
environment:
PMA_HOST: db
PMA_ARBITRARY: 1
ports:
- "8080:80"
depends_on:
- db
volumes:
db_data:
3. src/index.php (動作確認用コード)
PHPからMySQL 5.5へ接続できるか確認するためのテストファイル。
<?php
$host = 'db';
$db = 'my_database';
$user = 'my_user';
$pass = 'my_password';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
try {
$pdo = new PDO($dsn, $user, $pass);
echo "<h1>PHP " . phpversion() . " から MySQL 5.5 への接続成功!</h1>";
} catch (\PDOException $e) {
echo "<h1>接続エラー:</h1> " . $e->getMessage();
}
動作確認
1. コンテナのビルドと起動
WSL2のターミナルを開き、docker-compose.yml があるディレクトリに移動して以下のコマンドを実行する。
docker compose up -d --build
確認方法: docker compose ps を実行し、php_app, mysql_db, phpmyadmin の3つのコンテナが Up または Running になっているか確認する。
2. PHP環境とDB接続の確認
Webブラウザを開き、以下のURLにアクセスする。
http://localhost:8000
確認方法: 画面に「PHP 8.3.32 から MySQL 5.5 への接続成功!」と表示されれば成功。
3. phpMyAdminの確認
Webブラウザを開き、以下のURLにアクセスする。
http://localhost:8080
ログイン画面が表示されたら、以下のアカウント情報でログインする。
- ユーザ名: root (パスワード: rootpassword)
- または ユーザ名: my_user (パスワード: my_password)
確認方法: ダッシュボードが開かれ、左側データベース一覧に my_database が表示されていれば完了。
MySQL 5.5 は非推奨・サポート終了の古いバージョンのため、PHP 8.3 側の PDO/mysqli で接続する際に Authentication plugin 'old_passwords' cannot be loaded などのエラーが出る場合があります。その場合は、root アカウントで一度ログインし、パスワードハッシュ形式を新しい41バイトハッシュ(SET PASSWORD FOR 'my_user'@'%' = PASSWORD('my_password');)で再設定してください。
8080ポートを変更したい場合
phpMyAdminのポート8080が既に使用中の場合は docker-compose.yaml の ports の項目を変更する。
例:ポート8888へ変更する場合
# phpMyAdmin
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
environment:
PMA_HOST: db
PMA_ARBITRARY: 1
ports:
- "8888:80" # 左側のポート番号(8080)を空いている番号(例: 8888)に変更
depends_on:
- db
0 件のコメント:
コメントを投稿