dockerで開発環境を構築(PHP+MySQL+PHPMyAdmin)
本番環境とは物理的に別でありながらバージョンや設定条件が同じ開発環境をローカルのWindowsPC上に構築する。
大まかな流れは以下の通り。
- Docker Desktopを使える環境にする
- Docker Desktopのインストール
- 環境(コンテナ)構築用ファイルの作成
- 環境構築
- 動作確認
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 のダウンロードとインストール
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 動作確認
- 確認用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。
