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