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

開発環境コンテナ:PHP+Apache+MySQL+phpMyAdmin①
今回は、Docker Compose を使って「PHP+Apache+MySQL+phpMyAdmin」の開発環境を構築していきましょう。
この構成を使えば、ローカル環境でも本番に近い形でWebアプリケーションを開発できます。
まずは、必要な設定ファイル「Dockerfile」と「compose.yaml」を作成します。
開発環境の構成
以下のように「Apache+PHP」コンテナ、MySQLコンテナとphpMyAdminコンテナを構成します。

このシリーズは2部構成で進めます。
今回の①では、3つのコンテナを作成します👇
| コンテナ名 | 役割 | 使用イメージ |
|---|---|---|
| php-apache_container | PHP+ApacheのWebサーバー | php:8.0-apache |
| mysql_container | データベース(MySQL 8.0) | mysql:8.0 |
| phpmyadmin_container | MySQL管理ツール | phpmyadmin/phpmyadmin |
PHPはApacheが統合された公式イメージを使用するため、Apache単体のイメージは不要です。
MySQLのデータは永続化ボリューム db-data に保存し、PHPアプリのソースはホストの ./src にマウントします。
PHPとは?

PHPは、動的なWebページやWebアプリケーションを作るためのスクリプト言語です。
HTMLに直接埋め込めるため学びやすく、初心者にも人気があります。
特にデータベースとの連携が得意で、MySQLやMariaDBと組み合わせて使われることが多いです。
| 項目 | 内容 |
|---|---|
| 言語名 | PHP(Hypertext Preprocessor) |
| 主な用途 | Webアプリケーション開発 |
| 実行場所 | Webサーバー上(今回はApache内) |
| 特徴 | HTMLと混在可能・データベース連携が容易 |
🔗 公式サイト:https://www.php.net/

Apacheとは?

Apacheは、世界で最も使われているWebサーバーソフトウェアの1つです。
1995年にリリースされたオープンソースプロジェクトで、安定性と拡張性が抜群です。
今回の構成では、PHPとApacheが統合されたイメージを使用します。
MySQLとは?

MySQLは、オープンソースのリレーショナルデータベース管理システム(RDBMS)です。
高速で信頼性が高く、PHPとの相性も非常に良いため、Webアプリ開発でよく利用されます。
| 項目 | 内容 |
|---|---|
| 種類 | RDBMS(リレーショナルデータベース) |
| バージョン | 8.0 |
| 特徴 | 高速・安定・スケーラブル |
| 開発元 | Oracle Corporation |
phpMyAdminとは?

phpMyAdminは、ブラウザからMySQLを操作できるWebベースの管理ツールです。
SQLを知らなくても、GUIでテーブル作成やデータ確認ができます。
| 操作例 | 説明 |
|---|---|
| データベース作成 | 新しいDBをGUIから追加 |
| テーブル管理 | フィールドの追加・削除 |
| クエリ実行 | SELECT文などを直接実行可能 |
| ユーザー管理 | 権限設定やパスワード変更 |
作業前のクリーンアップ
まずはDocker環境をクリーンにしておきましょう。
古いコンテナや未使用のボリュームが残っていると、思わぬエラーの原因になります。
実行中のコンテナをすべて停止した上で、次のコマンドを実行します。
docker system prune -a --volumesコマンド解説
| 項目 | 説明 |
|---|---|
| docker system prune | 不要なDockerオブジェクトを削除するコマンド |
| -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] yDocker DesktopのGUIでも同様の操作が可能です。コマンドが苦手な方はGUI操作でもOKです。
作業ディレクトリの作成
次に作業ディレクトリを作りましょう。
cd desktop/docker
mkdir phpdev3
cd phpdev3実行結果
PS C:\Users\joeac> cd desktop/docker
PS C:\Users\joeac\Desktop\docker> mkdir phpdev3
Directory: C:\Users\joeac\Desktop\docker
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2025/10/26 3:43 phpdev3
PS C:\Users\joeac\Desktop\docker> cd phpdev3
PS C:\Users\joeac\Desktop\docker\phpdev3>コマンドの意味
| コマンド | 説明 |
|---|---|
| cd desktop/docker | 作業場所をDockerフォルダに移動 |
| mkdir phpdev3 | 新しいプロジェクト用フォルダを作成 |
| cd phpdev3 | 作成したフォルダに移動 |
Dockerfileの作成
VS Codeを開いて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が統合されたベースイメージを使用 |
| apt-get update | パッケージリストを更新 |
| apt-get install -y libonig-dev | 正規表現ライブラリを追加 |
| apt-get install -y default-libmysqlclient-dev | MySQLクライアントを追加 |
| docker-php-ext-install pdo_mysql | PHPからMySQLに接続するPDO拡張を有効化 |
| echo 'default_authentication_plugin=...' | MySQL認証を旧形式(mysql_native_password)に設定 |
これで、PHPがMySQL 8.0と正しく通信できるようになります。
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
links:
- db:mysql
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin_container
environment:
PMA_HOST: db
PMA_PORT: 3306
MYSQL_ROOT_PASSWORD: root-pass
ports:
- "8080:80"
volumes:
db-data:定義内容まとめ
| サービス名 | 役割 | 主な設定 |
|---|---|---|
| db | MySQLデータベース | 環境変数でDB名・ユーザー設定、データ永続化 |
| php | PHP+Apache | ビルドしたイメージを使用、MySQLにリンク |
| phpmyadmin | WebベースのDB管理ツール | MySQLと連携し、ポート8080でアクセス |
コンテナの起動

設定が完了したら、いよいよコンテナを起動します!
docker compose up -dコマンド解説
| オプション | 説明 |
|---|---|
| up | compose.yamlに基づいてコンテナを起動 |
| -d | バックグラウンド(デタッチド)モードで実行 |
起動が成功すると、次のように表示されます👇
PS C:\Users\joeac\Desktop\docker\phpdev3> docker compose up -d
[+] Running 34/34
✔ db Pulled 17.2s
✔ phpmyadmin Pulled 18.5s
[+] Building 27.9s (9/9) FINISHED
(省略)
[+] Running 6/6
✔ phpdev3-php Built 0.0s
✔ Network phpdev3_default Created 0.0s
✔ Volume phpdev3_db-data Created 0.0s
✔ Container mysql_container Started 0.7s
✔ Container phpmyadmin_container Star... 0.8s
✔ Container php-apache_container Star... 0.8sこれで、3つのコンテナが正しく起動しました!
コンテナの確認
現在、稼働中のコンテナを確認します。
docker ps実行結果
コンテナが3つ起動していることが確認できます。
PS C:\Users\joeac\Desktop\docker\phpdev3> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b22df18e8f33 phpdev3-php "docker-php-entrypoi…" 6 hours ago Up 6 hours 0.0.0.0:80->80/tcp, [::]:80->80/tcp php-apache_container
ba759e85b75e mysql:8.0 "docker-entrypoint.s…" 6 hours ago Up 6 hours 3306/tcp, 33060/tcp mysql_container
dc80e54d89b9 phpmyadmin/phpmyadmin "/docker-entrypoint.…" 6 hours ago Up 6 hours 0.0.0.0:8080->80/tcp, [::]:8080->80/tcp phpmyadmin_containerコンテナの動作確認
PHP+Apacheコンテナへの接続
まず、トップページを作成しておきます。
code ./src/index.html以下の内容を入力します。
<HTML>
It works!
</HTML> ブラウザから http://localhost にアクセスするとPHPページ、

phpMyAdminコンテナへの接続
http://localhost:8080 にアクセスするとphpMyAdmin画面が表示されます。

次回の内容
これで「開発環境コンテナ:PHP+Apache+MySQL+phpMyAdmin①」は完成です🎉
次回の②では、PHPプログラムを作成してMySQLに接続する方法を解説していきます。
