このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
【Docker入門】PHP+Apache+MySQL+phpMyAdminの開発環境コンテナ②

「PHP+Apache+MySQLの開発環境コンテナ①」の続きです。
「PHP+Apache+MySQL+phpMyAdminの開発環境コンテナ」は次の2部に分けて解説しています。
- PHP+Apache+MySQL+phpMyAdminの開発環境コンテナ①
- PHP+Apache+MySQL+phpMyAdminの開発環境コンテナ②
ここでは、データベースに接続するPHPプログラムの作成とWebブラウザから「PHP+Apache」コンテナに接続して、作成したプログラムを実行していきます。また、phpMyAdminコンテナに接続して、MySQLコンテナに接続します。
「Apache+PHP」コンテナとMySQLコンテナとphpMyAdminコンテナの構成
以下のように「Apache+PHP」コンテナとMySQLコンテナとphpMyAdminコンテナで構成しています。

MySQLのデータは「db-data」という永続的なボリュームに保存し、「PHP+Apache」コンテナのデータはホストマシンの「./src」ディレクトリにバインドマウントさせています。
PHPプログラムの作成
「src」ディレクトリの中に「index.php」ファイルを作成します。
・「code ./src/index..php」コマンドを実行します。
「src」ディレクトリは、「index..php」を保存時に自動的に作成されます。
PS C:\Users\joeac\Desktop\docker\phpdev3> code ./src/index.php
VS Codeが起動します。

・次のPHPプログラムを入力します。
<?php
// データベース接続情報
$host = 'db'; // Docker ComposeでのMySQLサービス名
$dbname = 'test-db';
$user = 'test-user';
$pass = 'test-pass';
// 待機時間を設定してMySQLサービスが起動するのを待つ
$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";
}
?>
PHP+Apacheコンテナへの接続
・Webブラウザを起動して、URLに「localhost」と入力します。
「データベース接続成功、テーブル作成成功」と表示されます。

エラーが表示される場合は、「index.php」のユーザー名やパスワードなどを確認してみてください。
phpMyAdminコンテナへの接続
・Webブラウザを起動して、URLに「localhost:8080」と入力します。

phpMyAdminのTOPページが表示されます。
・以下の内容を入力して「ログイン」ボタンをクリックします。
ユーザ名・・・test-user
パスワード・・・test-pass

phpMyAdminにログインすると下図の画面が表示されます。

・「test-db」を展開し、「test_table」を展開します。
テーブルのカラムが確認できます。
