◇Docker: PHP+MySQL+phpMyAdmin環境作成

2026年10月11日日曜日

Docker MySQL PHP phpMyAdmin WSL

t f B! P L

プロジェクトの構成

以下環境が必要となったので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 接続時の注意点
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

公開:2026.10.11(日) 10:45 快晴 25℃

QooQ