【開発環境 #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
WSL2 + Docker の記事一覧
Docker イメージの選定
Docker Hubへアクセスし、使用したいイメージ名で検索します。
PHP
- Docker Hubの上部検索フォームで「php」と検索
- 検索結果からphp✓Official Imageを選択
- タブメニューのTagsをクリックし任意のバージョンを選択する
- 今回は7.4.27-apache
- 画面に表示されている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を作成します。
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関連のみを載せています。
[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
<?php
phpinfo();
Docker Compose
完成したファイルは以下となります。設定項目の解説は省略しますが、環境変数やデータ永続化などを指定しています。
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