【開発環境 #6】PHP, phpMyAdmin, MariaDBをDocker Composeで【WSL2,Docker】

今回は「PHP・phpMyAdmin・MariaDB」を使用し、より本番環境に近い開発環境を構築します。

前回はPHPが動くコンテナを用意しました。直観的には同じコンテナにphpMyAdmin、MariaDBを追加でインストールするように思えますが、そうではなく、phpMyAdmin、MariaDBにもそれぞれコンテナを用意し、各コンテナを連携させることで、より変化に強い環境をつくっていきます。複数コンテナの連携にはDocker Desktopと同時にインストールされたDocker Composeを使用します。

環境
Windows
10 home (20H2)
WSL
2
Ubuntu
20.04 LTS
Docker Desktop for Windows
3.5.2 (66501)
Docker Compose
1.29.2

Docker イメージの選定

Docker Hubへアクセスし、使用したいイメージ名で検索します。

PHP

  1. Docker Hubの上部検索フォームで「php」と検索
  2. 検索結果からphp✓Official Imageを選択
  3. タブメニューのTagsをクリックし任意のバージョンを選択する
    1. 今回は7.4.27-apache
  4. 画面に表示されているphp:7.4.27-apacheが使用するイメージ名

phpMyAdmin

検索方法はPHPと同じです。契約サーバーなどの本番環境と合わせます。
今回は最新版を意味するphpmyadmin:latestを使用します。

MariaDB

検索方法はPHPと同じです。
今回はmariadb:10.5を使用します。

ビルドコンテキスト

Ubuntuの/home/dev/phpをビルドコンテキストとします。最終的に以下の構成になります。

home/dev/php
|-- docker/
|   `-- php-apache/
|       |-- Dockerfile
|       `-- php.ini
|-- src/
|   `-- info.php
`-- docker-compose.yml

Dockerfile

PHPのコンテナでComposerを使用したいので、マルチステージビルドを使用したDockerfileを作成します。

docker/php-apache/Dockerfile
FROM php:7.4.27-apache

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
COPY ./php.ini /usr/local/etc/php/php.ini

RUN pecl install xdebug-3.1.1 && \
    docker-php-ext-enable xdebug && \
    rm -r /tmp/pear

php.ini

Xdebug関連のみを載せています。

docker/php-apache/php.ini
[xdebug]
xdebug.client_host = host.docker.internal
; xdebug.client_port=9003
; xdebug.log = /tmp/xdebug.log
; xdebug.var_display_max_children = -1
; xdebug.var_display_max_data = -1
; xdebug.var_display_max_depth = -1
xdebug.mode = develop,debug
xdebug.start_with_request = trigger

info.php

src/info.php
<?php

phpinfo();

Docker Compose

完成したファイルは以下となります。設定項目の解説は省略しますが、環境変数やデータ永続化などを指定しています。

docker-compose.yml
version: '3.8'

volumes:
    db_data:

services:
  web:
    build: ./docker/php-apache
    ports: 
      - 8080:80
      - 9003:9003
    volumes:
      - ./src:/var/www/html
    tty: true
    stdin_open: true
    depends_on:
      - db

  phpmyadmin:
    image: phpmyadmin:latest
    ports:
      - 8081:80
    environment:
      PMA_HOST: db
      PMA_USER: php
      PMA_PASSWORD: php
    depends_on:
      - db

  db: 
    image: mariadb:10.5
    ports:
      - 3306:3306
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-time-zone=Asia/Tokyo
    volumes: 
      - db_data:/var/lib/mysql
    environment:
      MARIADB_ROOT_PASSWORD: password
      MARIADB_DATABASE: php_db
      MARIADB_USER: php
      MARIADB_PASSWORD: php
      TZ: Asia/Tokyo

コンテナ操作

以下、Windows Terminal > Ubuntu にて行います。

$ pwd
/home/dev/php

作成 & 起動

docker-compose.ymlに書いた計3つのコンテナを起動します。

$ docker-compose up -d

Creating volume "php_database" with default driver
Building web
.....
Creating php_db_1 ... done
Creating php_phpmyadmin_1 ... done
Creating php_web_1        ... done

成功したようです。

  • http://localhost:8080/info.phpにアクセスし、xdebugがインストールされていることを確認します。
  • http://localhost:8081にアクセスし、phpMyAdminがインストールされていることを確認します。

停止

$ docker-compose stop

再始動

$ docker-compose restart

入る & 抜ける(bash)

# 入る
$ docker-compose exec web bash

# 抜ける
$ exit

停止 & 削除

$ docker-compose down

Dockerfile更新時の再ビルド

$ docker-compose dwon
$ docker-compose up -d --build