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

開発環境コンテナ:PHP+Apache+MySQL+phpMyAdmin②
前回の「開発環境コンテナ:PHP+Apache+MySQL+phpMyAdmin①」では、3つのコンテナを構築して起動するところまでを解説しました。
今回はその続きとして、実際にPHPプログラムを作成し、MySQLデータベースに接続する手順を説明していきます。
さらに、phpMyAdminを使ってデータベースの中身をブラウザから確認してみましょう。
コンテナ構成の確認
まずは、現在の構成をもう一度おさらいしておきましょう。
| コンテナ名 | 役割 | ポート | マウント先・ボリューム |
|---|---|---|---|
| php-apache_container | PHP+ApacheのWebサーバー | 80番ポート (http://localhost) | ./src → /var/www/html |
| mysql_container | MySQLデータベース | 3306番ポート(内部通信専用) | db-data:/var/lib/mysql |
| phpmyadmin_container | MySQL管理ツール | 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:8080phpMyAdminのログイン画面が表示されます。

ログイン情報
| 項目 | 入力内容 |
|---|---|
| ユーザー名 | 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.php | VS 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フォームやデータ登録機能を作ることも簡単にできますよ。
