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

🐳 開発環境コンテナ:PHP+Apache+MariaDB②
「開発環境コンテナ:PHP+Apache+MariaDB①」でコンテナ構成を作成しましたね。
今回はその続きとして、実際に MariaDBデータベースへ接続するPHPプログラム を作成し、Webブラウザから動作を確認してみましょう。
💡 コンテナ構成の確認
今回の環境は、前回構築した以下の2つのコンテナで構成されています。
| コンテナ名 | 役割 | イメージ | 主なデータの保存先 |
|---|---|---|---|
| mariadb_container | データベース(MariaDB) | mariadb:10.8 | db-data ボリューム(永続化) |
| php-apache_container | Webサーバー+PHP実行環境 | php:8.0-apache | ./src ディレクトリ(バインドマウント) |
MariaDBのデータは db-data ボリュームに永続化され、PHPソースコードはホスト側の ./src ディレクトリと同期しています。
つまり、src フォルダ内のファイルを編集すると、コンテナ内にも即時反映される仕組みです。

🧱 PHPプログラムの作成
次に、MariaDBへ接続するPHPプログラムを作りましょう。
PHP+Apacheコンテナの /var/www/html に対応している src ディレクトリにファイルを作成します。
📂 index.php の作成
コマンドプロンプトまたはPowerShellで以下を実行します。
code ./src/index.phpVS Codeが起動したら、次のプログラムを入力して保存します。
<?php
// データベース接続情報
$host = 'db'; // Docker Composeでのサービス名
$dbname = 'test-db';
$user = 'test-user';
$pass = 'test-pass';
try {
// データベースに接続
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
// テーブル作成クエリ
$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'; | データベースのホスト名を指定します。Docker Composeのservices:で定義されたサービス名がホスト名になります。 |
| $dbname = 'test-db'; | 接続先のデータベース名です(compose.yamlの MARIADB_DATABASE と一致)。 |
| $user = 'test-user'; | データベースユーザー名(compose.yamlの MARIADB_USER に対応)。 |
| $pass = 'test-pass'; | データベースパスワード(compose.yamlの MARIADB_PASSWORD に対応)。 |
| new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); | PHPのPDO拡張を使ってMariaDBに接続します。 |
| $sql = "CREATE TABLE IF NOT EXISTS ..." | テーブルを作成するSQL文。既に存在する場合はスキップします。 |
| $pdo->exec($sql); | SQL文を実行します。成功すればテーブルが作成されます。 |
| catch (PDOException $e) | 例外処理。接続失敗時にエラーメッセージを出力します。 |
⚙️ PDOとは?
PDO(PHP Data Objects)は、PHPでデータベースに接続するための汎用インターフェースです。
MySQLやMariaDBのほか、PostgreSQLやSQLiteなど、複数のDBを統一した方法で扱えるのが特徴です。
| メソッド | 説明 |
|---|---|
| new PDO() | データベース接続を開始する |
| exec() | SQL文を実行する(結果は返さない) |
| prepare() | SQL文を事前に準備して安全に実行する(プレースホルダー使用可) |
🌐 コンテナへの接続と実行
プログラムが完成したら、ブラウザから動作確認をしてみましょう。
コンテナはすでに docker compose up -d で起動済みの状態とします。
💻 ブラウザでアクセス
ブラウザを開いて、次のURLにアクセスします。
http://localhost🎉 結果の表示
画面に次のメッセージが表示されれば成功です👇
データベース接続成功、テーブル作成成功

このメッセージが出力されたということは、PHPが正常にMariaDBへ接続し、test_table というテーブルが作成されたことを意味します。
⚠️ トラブル時のチェックポイント
もしエラーが出る場合は、次の点を確認してみてください。
| 確認項目 | 内容 |
|---|---|
| データベース名 | compose.yamlの MARIADB_DATABASE と一致しているか |
| ユーザー名・パスワード | MARIADB_USER, MARIADB_PASSWORD の設定と一致しているか |
| コンテナの起動状況 | docker ps で mariadb_container が起動しているか |
| ポートの競合 | 他のWebサービスがポート80を使用していないか |
✅ まとめ
| ステップ | 内容 |
|---|---|
| ① | index.php を src フォルダに作成 |
| ② | PHPのPDOでMariaDBに接続するコードを記述 |
| ③ | http://localhost にアクセスして動作確認 |
| ④ | 「データベース接続成功」と表示されれば完了! |
💬 まとめのひとこと
PHP+Apache+MariaDBの開発環境は、Docker Composeで手軽に構築できます。
WebアプリからDBにアクセスする処理も、コンテナ間通信が自動で設定されるので簡単!
次は、作成したテーブルにデータを挿入したり、取得したりしてみましょう。
