このページで解説している内容は、以下の 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_containerPHP+ApacheのWebサーバーphp:8.0-apache
mysql_containerデータベース(MySQL 8.0)mysql:8.0
phpmyadmin_containerMySQL管理ツール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] y

Docker 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-apachePHPとApacheが統合されたベースイメージを使用
apt-get updateパッケージリストを更新
apt-get install -y libonig-dev正規表現ライブラリを追加
apt-get install -y default-libmysqlclient-devMySQLクライアントを追加
docker-php-ext-install pdo_mysqlPHPから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:

定義内容まとめ

サービス名役割主な設定
dbMySQLデータベース環境変数でDB名・ユーザー設定、データ永続化
phpPHP+Apacheビルドしたイメージを使用、MySQLにリンク
phpmyadminWebベースのDB管理ツールMySQLと連携し、ポート8080でアクセス

コンテナの起動

設定が完了したら、いよいよコンテナを起動します!

docker compose up -d

コマンド解説

オプション説明
upcompose.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に接続する方法を解説していきます。