dockerで開発環境を構築(PHP+MySQL+PHPMyAdmin)

本番環境とは物理的に別でありながらバージョンや設定条件が同じ開発環境をローカルのWindowsPC上に構築する。

大まかな流れは以下の通り。

  1. Docker Desktopを使える環境にする
  2. Docker Desktopのインストール
  3. 環境(コンテナ)構築用ファイルの作成
  4. 環境構築
  5. 動作確認

Docker Desktopが動く環境を構築してしまったら、あとは必要に応じて開発環境をいくつでも(PCが許す範囲で)作ることができる。

1. Docker Desktopを使える環境にする

WindowsでDocker Desktopは、WSL2(Windows Subsystem for Linux 2)が入っている必要があるので、まだ入っていない人は先にインストール。

1.1 WSLのインストール状況確認

PowerShell または コマンドプロンプトで以下を実行しWSLがインストールされているか確認(以下はWSLインストール済みでUbuntuが導入されている状態)

> wsl --status
既定のディストリビューション: Ubuntuここは環境により異なる
既定のバージョン: 2

インストール済みの場合、1.2はスキップ

1.2 WSLのインストール

PowerShell を管理者権限で起動しwsl --installを実行

もう一度1.1を実行しインストール完了を確認

2.Docker Desktop のインストール(Windows)

2.1 Docker Desktop のダウンロードとインストール

  1. https://www.docker.com/products/docker-desktop/ を開く

2. 「Download for Windows」から「Download for Windows - AMD64」を選択(Intelなどx64アーキテクチャの場合)

3. Docker Desktop Installer.exeを実行

4. 設定画面で "Use WSL 2 instead of Hyper-V" にチェック

2.2 Docker Desktop 起動と動作確認

2. アカウント作成はスキップしてOK(Docker Hubにイメージをアップロードする場合に必要)

1. Docker Desktop を起動(ウインドウが立ち上がる)

3. PowerShellで以下のコマンドを実行しDockerが正常にインストールされているか確認

> docker --version
Docker version 28.5.2, build ecc6942  ※バージョンが表示されればDockerが正常にインストールされている


2.3 Dockerの動作確認

動作確認用のコンテナ「hello-world」を実行して動作確認

> docker run hello-world
Hello from Docker! ※これが表示されればOK


以下メッセージが表示されるが無視してOK

※Docker Desktop ウインドウを見ると、hello-worldが起動していることが確認できる

ここまでは、Docker Desktopインストール時にのみ行う作業で、ここから先は、開発環境を構築する都度、環境に応じた環境(コンテナ)を構築していくことになる。

3. 環境(コンテナ)構築用ファイルの作成(PHP+MySQL+PHPMyAdmin)

ローカル環境を以下のような構成で構築する想定(ディレクトリは各自の環境に合わせて適宜変更)

C:\Users\{ユーザー名}\DEV\{Project名}PCの保存先なのでわかりやすい場所でOK
    ├ src/            ← PHP/JS/HTMLなど
    ├ docker/
    │     ├ docker-compose.yml
    │     ├ php.ini
    │     └ Dockerfile
    └ db_init/
          └ init.sql   ← DB初期化必要に応じて

3.1 Dockerfileの作成

以下のような内容でdocker/Dockerfileを作成。

今回はPHP8.2とMySQLをインストールする

FROM php:8.2-apache

# PHP 拡張モジュール必要に応じて
RUN docker-php-ext-install mysqli pdo pdo_mysql

# php.ini をコピー
COPY php.ini /usr/local/etc/php/

# 作業ディレクトリを /var/www/html に設定
WORKDIR /var/www/html

3.2 docker-compose.ymlの作成

以下のような内容でdocker/docker-compose.ymlを作成。

container_nameやID、パスワードなどは必要に応じて変更。
phpmyadminのポートは8081にするのが一般的だが、筆者の環境ではセキュリティソフトが8081を使ってしまっていたため8085に変更している。

services:
  php:
    build: .
    container_name: project_php
    ports:
      - "8080:80"
    volumes:
      - ../src:/var/www/html
    depends_on:
      - db

  db:
    image: mysql:8.0
    container_name: project_db
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: project_db
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    volumes:
     - ../db_init:/docker-entrypoint-initdb.d
    ports:
      - "3306:3306"

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    container_name: project_phpmyadmin
    environment:
      PMA_HOST: db
      PMA_USER: root
      PMA_PASSWORD: rootpassword
    ports:
      - "8085:80"
    depends_on:
      - db

3.3 php.iniの作成

display_errors = On
error_reporting = E_ALL
date.timezone = Asia/Tokyo

3.4 init.sqlの作成

既存のDBデータを持ってきて使う場合は、ダンプしたデータをinit.sqlとして置いておく(PHPMyAdminの場合はエクスポート→簡易・SQL)

4 環境構築

PowerShellでdockerフォルダに移動し、docker composeで環境を起動する

cd C:\Users\{ユーザー名}\DEV\project名\docker  ←  Dockerfileとdocker-compose.ymlを設置したフォルダ
docker-compose up -d  ← docker composeで環境を起動

初回は必要なコンポーネントをダウンロードするので時間が掛かる

Decker Desktop上でもdocker-php、mysql、phpmyadminのコンテナが起動していることが確認できる

5 動作確認

  1. 確認用phpファイルを作成する(src/index.php)
<?php
  phpinfo();
?>

2. http://localhost:8080/ にアクセスし、phpinfo画面が表示されたらOK

3. http://localhost:8085 にアクセスし、phpMyAdminが開き、docker-compose.ymlで指定したデータベースにinit.sqlのテーブルがインポートされていればOK(インポートしない場合は無視)

6. 終了&次回の起動

終了するときは以下コマンドを実行。そのままWindowsを終了してもOK。

docker compose down基本はコレ
docker compose down -vデータベースのデータなど関連ボリュームを消す

データベースのデータをinit.sqlのデータに戻す場合は-vを付けると、データベース用のファイルが削除されるので次回起動時にデータベースが初期化される。

PHPやMySQLなどの永続データは削除されないので再びダウンロードされることはない。

次回以降の起動はDocker Desktopを起動してからPowerShellで以下のコマンドを実行(4.環境構築と同じコマンド)

cd C:\Users\{ユーザー名}\DEV\project名\docker
docker-compose up -d

もしくは、Docker Desktopから対象コンテナを選んでRunをクリックでもOK。