経緯
slimphp/Slim-Skeleton を利用したいと考えました。
手元の端末で開発しようとしたところ、 XAMPP に Xdebug を入れ忘れていたことに気付きました。しかも、 XAMPP の PHP のバージョンで Xdebug のインストールが止まってしまいました。
そこで、スケルトンプロジェクトに付随している Docker Compose での開発を試みましたが、この Docker Compose 内で pull してくるイメージは Composer も Xdebug もないので入れることにしました。
コード
ディレクトリ構造
root/
├ _docker/ // Dockerに関する設定置き場
│ ├ dockerfiles/
│ │ ├ settings/
│ │ │ └ php.ini // PHPの設定 (Xdebug 有効化)
│ │ │
│ │ └ Dockerfile
│ │
│ ├ mysql/ // MariaDB 用ディレクトリ
│ │ └ .gitkeep
│ │
│ └ phpmyadmin/
│ ├ conf/
│ │ └ phpmyadmin-misc.ini // phpMyAdmin の設定 (メモリ上限など)
│ │
│ └ sessions/
│ └ .gitkeep
│
└ docker-compose.yml
Docker に関する部分のみ列挙。
docker-compose.yml
version: '3.7'
volumes:
logs:
driver: local
services:
slim:
build:
context: ./_docker/dockerfiles/
dockerfile: Dockerfile
working_dir: /var/www
command: php -S 0.0.0.0:8080 -t public
environment:
docker: "true"
ports:
- 8080:8080
volumes:
- .:/var/www
- ./logs:/var/www/logs
db:
image: mariadb
restart: always
ports:
- 3306:3306
volumes:
- ./_docker/mysql/mysql:/var/lib/mysql
- ./_docker/mysql/initdb.d:/docker-entrypoint-initdb.d
environment:
- MYSQL_ROOT_PASSWORD=pwd
- MYSQL_DATABASE=test
- MYSQL_USER=user
- MYSQL_PASSWORD=pwd
phpmyadmin:
image: phpmyadmin/phpmyadmin
volumes:
- ./_docker/phpmyadmin/sessions:/sessions
- ./_docker/phpmyadmin/conf/phpmyadmin-misc.ini:/usr/local/etc/php/conf.d/phpmyadmin-misc.ini
environment:
- PMA_ARBITRARY=1
- PMA_HOST=db
- PMA_USER=user
- PMA_PASSWORD=pwd
ports:
- 8081:80
変更点は以下。
- PHP 用環境:
Dockerfile
を使ったイメージにカスタマイズ - DB: MariaDB のイメージをそのまま利用
environment
のパラメータはそのまま使用。アプリケーションや phpMyAdmin 側と動機は取れていないですがひとまずはこれで……
- phpMyAdmin: これも phpMyAdmin 公式イメージを流用
_docker/dockerfiles/Dockerfile
FROM php:7-alpine
RUN apk --update add curl
RUN set -ex \
&& apk --no-cache add \
autoconf build-base
RUN pecl install xdebug
RUN docker-php-ext-enable xdebug
RUN docker-php-ext-install pdo_mysql
COPY settings/php.ini /usr/local/etc/php/conf.d
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
php:7-alpine
をベースに Xdebug と Composer を追加。
_docker/dockerfiles/settings/php.ini
xdebug.mode=coverage
Xdebug でカバレッジを有効化するための設定を追加するため。なお、 Dockerfile
で COPY
する際のホストマシンでのパスは Dockerfile
の存在するディレクトリから下でないと参照できない という地味な制約があるので dockerfiles
ディレクトリをわざわざ掘りました。
_docker/phpmyadmin/conf/phpmyadmin-misc.ini
allow_url_fopen = Off
max_execution_time = 600
memory_limit = 64M
post_max_size = 64M
upload_max_filesize = 64M
メモリ上限等のカスタマイズ。
これで今回はカバレッジ出力まで動作することを確認しました。
参考
Xdebug
Warning: XDEBUG_MODE=coverage or xdebug.mode=coverage has to be set
が出たので step3 について実施。
なお、今回のケースでは
extension=xdebug.so
は不要だった。
Dockerfile
ほぼこれでOK.
こちらも参照。 php -v
で with Xdebug
と付いていればOK。
Dockerfile の COPY
Mariadb
could not find driver
普通に考えたら確かにドライバがないので追加して解決。
シェル
bash ではなく ash 。 bin/ash
指定。
sr -c
最終的には使わずに済みましたが念のためメモ。