このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Docker超入門:開発環境コンテナ:PHP+Apache+MySQL+phpMyAdmin②

開発環境コンテナ:PHP+Apache+MySQL+phpMyAdmin②

 前回の「開発環境コンテナ:PHP+Apache+MySQL+phpMyAdmin①」では、3つのコンテナを構築して起動するところまでを解説しました。
 今回はその続きとして、実際にPHPプログラムを作成し、MySQLデータベースに接続する手順を説明していきます。

さらに、phpMyAdminを使ってデータベースの中身をブラウザから確認してみましょう。

コンテナ構成の確認

まずは、現在の構成をもう一度おさらいしておきましょう。

コンテナ名役割ポートマウント先・ボリューム
php-apache_containerPHP+ApacheのWebサーバー80番ポート
(http://localhost)
./src → /var/www/html
mysql_containerMySQLデータベース3306番ポート(内部通信専用)db-data:/var/lib/mysql
phpmyadmin_containerMySQL管理ツール8080番ポート
(http://localhost:8080)
なし(データはMySQLに接続)

図にすると、次のようになります👇

【構成図説明】

  • PHP+Apacheコンテナ:Webアプリを実行する。MySQLに接続して動的にデータを操作する。
  • MySQLコンテナ:データベースを保持し、永続化ボリューム db-data に保存する。
  • phpMyAdminコンテナ:MySQLをGUIで管理する。
  • ホストPC./src にあるファイルがコンテナ内 /var/www/html に反映される。

PHPプログラムの作成

次に、Webアプリの入口となる index.php ファイルを作成します。

作業はホストマシン側で行い、内容はコンテナ内の /var/www/html に自動で同期されます。

ファイル作成コマンド

code ./src/index.php

このコマンドを実行すると、VS Codeが起動します。
「src」フォルダが存在しない場合は、自動的に作成されます。

index.php の内容

次のPHPコードを入力して保存してください👇

<?php
// データベース接続情報
$host = 'db'; // Docker ComposeでのMySQLサービス名
$dbname = 'test-db';
$user = 'test-user';
$pass = 'test-pass';

// MySQLが起動するまでリトライ(最大10回)
$max_attempts = 10;
$attempt = 0;
while ($attempt < $max_attempts) {
    try {
        $pdo = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
        break;
    } catch (PDOException $e) {
        sleep(1);
        $attempt++;
    }
}

if ($attempt === $max_attempts) {
    echo "データベース接続エラー: MySQLサービスが起動しませんでした\n";
    exit(1);
}

try {
    // テーブル作成クエリ
    $sql = "CREATE TABLE IF NOT EXISTS test_table (
        id INT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(255) NOT NULL
    )";
    
    $pdo->exec($sql);
    echo "データベース接続成功、テーブル作成成功\n";
} catch (PDOException $e) {
    echo "テーブル作成エラー: " . $e->getMessage() . "\n";
}
?>

コードの解説

処理内容説明
$host = 'db'MySQLサービス名を指定(compose.yamlで定義済み)
$pdo = new PDO(...)PHPからMySQLへ接続するPDOクラスを使用
try...catch例外処理で接続エラー時もプログラムが停止しないように
CREATE TABLEデータベースにテーブルを作成するSQL文
echo実行結果をブラウザに表示

このコードは、MySQLが起動していない場合にリトライする仕組みを備えているため、
コンテナ起動直後の接続エラーも自動でリカバリしてくれます。

PHP+Apacheコンテナへの接続

プログラムを保存したら、ブラウザを開いて以下のURLにアクセスします👇

http://localhost

しばらく待つと、次のようなメッセージが表示されます。

データベース接続成功、テーブル作成成功

このメッセージが出ればOKです✨
PHP+ApacheコンテナからMySQLへの接続とテーブル作成が無事成功しています。

もしエラーが出る場合は、index.php のユーザー名やパスワードをもう一度確認してみましょう。

phpMyAdminコンテナへの接続

次に、phpMyAdminを使ってデータベースの中を確認してみます。

アクセス方法

ブラウザで以下のURLにアクセスします👇

http://localhost:8080

phpMyAdminのログイン画面が表示されます。

ログイン情報

項目入力内容
ユーザー名test-user
パスワードtest-pass

以下の内容を入力して「ログイン」ボタンをクリックします。

ユーザ名・・・test-user
パスワード・・・test-pass

データベースの確認

ログインすると、左側のナビゲーションに test-db が表示されます。
「test-db」展開すると test_table が確認できます。

1.phpMyAdminの左側から「test-db」をクリック。
2.「test_table」をクリック。
3.テーブル定義(id, name)が作成されていることを確認します。

このテーブルは先ほどのPHPプログラムで自動生成されたものです。

コマンドの理解

ここで登場したコマンドをまとめておきましょう👇

コマンド目的主なオプション
code ./src/index.phpVS Codeを使って指定パスのファイルを作成・編集なし
docker compose up -dコンテナをバックグラウンドで起動-d(デタッチモード)
docker ps現在稼働中のコンテナを確認-a(停止中も表示)

ここまでの流れまとめ

ステップ作業内容結果
index.phpを作成PHPコードを用意
localhostにアクセステーブル作成成功メッセージ
phpMyAdminにアクセスtest-db と test_table を確認
データベースの確認MySQLに接続できることを確認

これで、PHP+Apache+MySQL+phpMyAdminの連携環境が完成しました🎉
Dockerを使えば、わずか数分でこのような開発環境を再現できるのが大きなメリットです。

次のステップでは、この環境をベースにして
PHPフォームやデータ登録機能を作ることも簡単にできますよ。