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

🐳 開発環境コンテナ:PHP+Apache+MySQL①
Docker Composeを使って、PHP+Apache+MySQL の開発環境を構築していきます。
この環境は、ウェブアプリケーションの開発や検証に非常に便利で、
ブラウザで動的なページを確認しながらデータベース操作まで行える万能な開発セットです。
このシリーズは2部構成で進めます。
| 回 | 内容 |
|---|---|
| 開発環境コンテナ:PHP+Apache+MySQL① | Dockerfileとcompose.yamlを作成して環境を構築する。 |
| 開発環境コンテナ:PHP+Apache+MySQL② | PHPプログラムを作成してMySQLと接続する。 |
ここでは①として、Dockerfile と compose.yaml を作成し、
実際に「PHP+Apache+MySQL」コンテナを起動するところまでを詳しく解説します。
💡 開発環境の概要
使用するイメージは PHP イメージと MySQL イメージの2つです。
Apacheイメージを使う必要はありません。
なぜなら、php:8.0-apache イメージにはすでにApacheが組み込まれているからです。
この1つのイメージでPHPとApacheを同時に利用できるため、構成がとてもシンプルになります。
🧱 PHP開発環境とは
PHP開発環境とは、PHP言語とその周辺ツールを組み合わせた、
Webアプリケーション開発専用の環境 のことです。
| 構成要素 | 役割 |
|---|---|
| PHP | 動的なWebページを生成するスクリプト言語 |
| Apache | PHPスクリプトを実行してWebページとして配信するWebサーバー |
| MySQL | Webアプリケーションで利用するデータを保存・管理するデータベース |
| Docker Compose | これらを複数コンテナとしてまとめて起動・停止・管理するツール |
この3つをDocker上で動かすことで、どんなマシンでも同じ動作環境を再現できるのが大きな利点です。
🐘 PHPとは

PHPは、HTML内にスクリプトを埋め込み、Webサーバー上で動的なページを生成できるプログラミング言語です。
フォーム入力の処理、データベースへのアクセス、セッション管理などに幅広く使われています。
| 特徴 | 内容 |
|---|---|
| 学習が容易 | 文法がシンプルで初心者にも扱いやすい。 |
| データベース連携 | MySQLやMariaDBなどと簡単に接続できる。 |
| 豊富なライブラリ | 多数の拡張モジュールとオープンソース資産が存在 |
| 高い汎用性 | WordPressやLaravelなどの主要フレームワークが採用 |
公式サイト:https://www.php.net/

🌍 Apacheとは

Apacheは、世界で最も利用されているWebサーバーソフトウェアです。
1995年に登場して以来、信頼性・拡張性の高さから多くのサイトで利用されています。
| 特徴 | 内容 |
|---|---|
| 高い安定性 | 長期間稼働するサーバーに最適 |
| 柔軟な設定 | 各種モジュールで機能を拡張可能 |
| オープンソース | 無料で利用可能、世界中で開発が活発 |
PHPとApacheを組み合わせることで、
「PHPで生成した動的ページを即時にWeb公開できる」環境が整います。
🗄️ MySQLとは

MySQLは、世界中で広く使われているオープンソースのデータベース管理システム(RDBMS)です。
データの保存・検索・更新を高速に処理でき、Web開発には欠かせない存在です。
| 特徴 | 内容 |
|---|---|
| 高速・軽量 | Webアプリケーションに最適化された設計 |
| 信頼性が高い | 商用でも多く採用される実績 |
| 互換性 | PHPのPDOやmysqliなど標準機能で簡単に接続可能 |
| デフォルト認証 | MySQL 8.0では「caching_sha2_password」→Dockerでは互換性のため設定変更が必要 |
⚙️ コンテナ構成の全体像

今回のCompose構成は以下の通りです。
| コンテナ名 | 役割 | イメージ | 永続化設定 |
|---|---|---|---|
| mysql_container | データベース | mysql:8.0 | db-data:/var/lib/mysql |
| php-apache_container | Webサーバー+PHP実行環境 | php:8.0-apache | ./src:/var/www/html |
データベース(MySQL)の情報はボリュームdb-dataに永続化され、
PHPプログラムはホスト側のsrcディレクトリに保存されます。
🧹 作業前のクリーンアップ
Docker環境をリセットして、古いコンテナや不要なイメージを削除しておきましょう。
docker system prune -a --volumes| オプション | 説明 |
|---|---|
| -a | 未使用のすべてのイメージを削除 |
| --volumes | 未使用のボリュームも同時に削除 |
このコマンドを実行すると、停止中のコンテナや不要なキャッシュもまとめて削除され、
クリーンな状態から構築を始めることができます。
実行結果
PS C:\Users\joeac> docker system prune -a --volumes
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all anonymous volumes not used by at least one container
- all images without at least one container associated to them
- all build cache
Are you sure you want to continue? [y/N] y※GUI操作が好きな方は、Docker Desktop の「Containers」「Volumes」タブから削除してもOKです。
📁 作業ディレクトリの作成
作業用ディレクトリに移動します。
新しいプロジェクトフォルダを作成して移動します。
cd desktop/docker
mkdir phpdev2
cd phpdev2実行結果
PS C:\Users\joeac> cd desktop/docker
PS C:\Users\joeac\Desktop\docker> mkdir phpdev2
Directory: C:\Users\joeac\Desktop\docker
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2025/10/24 0:10 phpdev2
PS C:\Users\joeac\Desktop\docker> cd phpdev2このフォルダに Dockerfile と compose.yaml を作成します。
🧩 Dockerfileの作成
VSCodeを起動してDockerfileを作成します。
code Dockerfile内容を以下のように記述して保存します。
FROM php:8.0-apache
# MySQLクライアントライブラリのインストール
RUN apt-get update && \
apt-get install -y libonig-dev && \
apt-get install -y default-libmysqlclient-dev && \
docker-php-ext-install pdo_mysql
# MySQL 8.0のデフォルト認証方式を設定
RUN { \
echo '[mysqld]'; \
echo 'default_authentication_plugin=mysql_native_password'; \
} > /etc/mysql/conf.d/mysql_default_auth.cnf💬 各コマンドの解説
| コマンド | 内容 |
|---|---|
| FROM php:8.0-apache | PHPとApacheが統合された公式ベースイメージを使用 |
| RUN apt-get update | パッケージリストを最新化 |
| apt-get install -y libonig-dev | PHPで正規表現を扱うためのライブラリを導入 |
| apt-get install -y default-libmysqlclient-dev | MySQLクライアントライブラリをインストール(MySQL 8.0対応) |
| docker-php-ext-install pdo_mysql | PHPのPDO MySQL拡張を追加(DB接続用) |
| echo '[mysqld]' ~ | MySQLの設定ファイルを作成し、認証方式を旧互換に設定 |
MySQL 8.0ではデフォルト認証が caching_sha2_password に変わったため、
従来通りPHPから接続できるように mysql_native_password を明示設定しています。
🧾 compose.yamlの作成
次に、Docker Compose設定ファイルを作成します。
code compose.yaml内容は以下の通りです。
services:
db:
image: mysql:8.0
container_name: mysql_container
environment:
MYSQL_ROOT_PASSWORD: root-pass
MYSQL_DATABASE: test-db
MYSQL_USER: test-user
MYSQL_PASSWORD: test-pass
volumes:
- db-data:/var/lib/mysql
php:
build: .
container_name: php-apache_container
depends_on:
- db
ports:
- "80:80"
volumes:
- ./src:/var/www/html
volumes:
db-data:💬 定義内容の説明
| サービス名 | 内容 |
|---|---|
| db | MySQL 8.0を利用するデータベースコンテナ |
| php | PHPとApacheを含むWebアプリケーションコンテナ |
| volumes | MySQLデータを永続化するためのボリューム設定 |
各項目の解説
| 項目 | 意味 |
|---|---|
| image | 使用するイメージ(例:mysql:8.0) |
| container_name | コンテナ名(例:mysql_container) |
| environment | 環境変数を指定(DB名やユーザー設定など) |
| volumes | ホスト側とコンテナ側のディレクトリを同期 |
| ports | ホストの80番ポートをコンテナの80番にマッピング |
| depends_on | phpコンテナがdbコンテナに依存して起動する設定 |
🚀 コンテナのビルドと起動
設定が完了したら、以下のコマンドで一括起動します。
docker compose up -d| オプション | 説明 |
|---|---|
| up | Composeファイルをもとにコンテナを起動 |
| -d | バックグラウンドで実行(デタッチモード) |
実行結果
PS C:\Users\joeac\Desktop\docker\phpdev2> docker compose up -d
[+] Running 12/12
(省略)
[+] Running 5/5
✔ phpdev2-php Built 0.0s
✔ Network phpdev2_default Created 0.0s
✔ Volume phpdev2_db-data Created 0.0s
✔ Container mysql_container Started 0.6s
✔ Container php-apache_container Star... 0.7s
PS C:\Users\joeac\Desktop\docker\phpdev2>2つのコンテナが Started と表示されれば成功です。
✅ まとめ
| ステップ | 内容 |
|---|---|
| ① | Dockerfileを作成してPHPとMySQL連携を設定 |
| ② | compose.yamlで2つのコンテナ構成を定義 |
| ③ | docker compose up -dで起動 |
| ④ | mysql_container と php-apache_container が同時に稼働 |
この状態で、PHP+Apache環境が立ち上がり、MySQLとも通信できる基礎が整いました。
次回の「開発環境コンテナ:PHP+Apache+MySQL②」では、実際にPHPからデータベースへ接続してみましょう。
