Dockerの設定

最初はDockerComposeの設定から。
今回はこんなファイル構成で作ります。

docker-compose.yml
htdocs
└ public
docker-compose
├ php
│ ├ Dockerfile
│ ├ 000-default.conf
│ └ php.ini
└ mysql
├ initdb.d
│ └ 000-default.conf
├ Dockerfile
└ my.cfn
docker-compose.yml
version: "3"
services:
web:
container_name: test_php
build:
context: ./docker-compose/php
ports:
- 8080:80
volumes:
- ./htdocs:/var/www/html
restart: always
db:
container_name: test_mysql
build:
context: ./docker-compose/mysql
volumes:
- ./docker-compose/mysql/initdb.d:/docker-entrypoint-initdb.d
- test_mysqlvol:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password
TZ: "Asia/Tokyo"
command: --default-authentication-plugin=mysql_native_password
ports:
- 3306:3306
restart: always
volumes:
test_mysqlvol:

phpのDockerfileはComposerとかXdebugとかと使えるようにします。

docker-compose/php/Dockerfile
FROM php:8-apache
COPY php.ini /usr/local/etc/php/
COPY *.conf /etc/apache2/sites-enabled/
RUN apt-get update \
&& apt-get install -y libzip-dev unzip \
&& docker-php-ext-install zip pdo_mysql mysqli \
&& docker-php-ext-enable mysqli \
&& a2enmod rewrite \
&& pecl install xdebug \
&& docker-php-ext-enable xdebug
COPY --from=composer /usr/bin/composer /usr/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer

何かしらフレームワークを使う場合ドキュメントルートを変更する必要があると思いますが、その時は下記ファイルを作ります。

docker-compose/php/000-default.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/public
<Directory /var/www/html/public>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

php.iniにxdebugを追加します。
その他の設定は必要に応じて追加してください。

docker-compose/php/php.ini
# ...
[xdebug]
xdebug.client_host = host.docker.internal
xdebug.client_port = 9003
xdebug.idekey = PHPSTORM
xdebug.mode = debug
xdebug.start_with_request = yes

次はMySQLのDockerfile。
設定ファイルの追加とか権限とか。

docker-compose/mysql/Dockerfile
FROM mysql:8
ADD my.cnf /etc/mysql/conf.d/my.cnf
RUN chmod 644 /etc/mysql/conf.d/my.cnf

my.cnfで文字コードの設定とかしておきます。

docker-compose/mysql/my.cnf
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[client]
default-character-set=utf8mb4

コンテナー構築時にDBにテーブルとか作りたい場合は下記に作ります。

docker-compose/mysql/initdb.d/1_ddl.sql
CREATE DATABASE IF NOT EXISTS dbname;
CREATE DATABASE IF NOT EXISTS dbname_test;

全部できたらコンテナーを構築しましょう。

$ docker-compose up -d

PhpStormでDcokerの設定

環境設定のDocker設定画面の設定をします。
Docker Desctop Macを使用している場合はDocker for Macをチェック。

次はPHPの設定項目

最初はCLIインタープリターはの選択はできない状態だと思うので、左の「…」でポップアップを表示して、「From Docker…」を選択する。

CLIインタープリターポップアップが表示されるので下記のように設定。

PHPのサーバー設定項目

PHPのデバッグ設定項目
おそらく変更に必要はないはず。

XDebugを使う

右上のセレクトボックスから「実行構成の編集…」を選択。

左上の「+」ボタンから「PHPリモートデバッグ」を選択して次のように設定。

デバッグボタンとリッスンボタンをアクティブにする。

あとはデバッグしたい行の左をクリックして赤丸状態にして、ブラウザでアクセスするとデバッグできる。

PHPUnitを使う

Composerでインストールしますが、Dcokerの場合コンテナに入ってインストールします。
PhpStormでは「サービス」のコンテナ名を右クリックして「ターミナルを作成」でコンテナでコマンド叩くことができます。

ターミナルを開いたら下記を実行してインストール。

$ composer require phpunit/phpunit --dev

PHPのテストフレームワーク設定項目画面で、「+」をクリックして、「リモートインタープリターによるPHPUnit」を選択。

設定は次のようにする。

設定ファイル(phpunit.xml)はtestsディレクトリにテストコードを入れるので次のようにしました。

htdocs/phpunit.xml
<?xml version="1.0"?>
<phpunit>
<testsuite name="Application Test">
<directory>./tests/</directory>
</testsuite>
</phpunit>

あとは作成したテストファイルを右クリックメニューから「実行」でテストできる。