※Docker for Mac(Windows)の場合は以下を参照してください。
https://qiita.com/yKanazawa/items/363ba93f8a376c5b9e75
Vagrant共有フォルダ機能を利用し、PHP StormでXDebugでステップ実行している方も多いと思いますが、Docker Toolbox環境でも可能です。
Docker Toolboxから起動したDocker machineのIPアドレスは、
デフォルトでは、192.168.99.100になりますが、
Docker Machineのコンテナ内において、
xdebug_remote_hostを192.168.99.1に設定することで、
ローカルPC内のPHP Stormと通信することが可能になります。
コンテナ内のphp.d/xdebug.ini設定
コンテナ構築時に、php-pecl-xdebugをインストールし、php.d/xdebug.iniに以下の設定をしておきます
[xdebug]
zend_extension="/usr/lib64/php/modules/xdebug.so"
xdebug.remote_enable = On
xdebug.remote_port = 9000
;xdebug.remote_autostart = On
xdebug.remote_host = 192.168.99.1
xdebug.profiler_output_dir = "/tmp"
xdebug.max_nesting_level= 1000
xdebug.idekey = "PHPSTORM"
※xdebug.remote_autostart = onのコメントアウトを解除すると、PHP Storm側でステップ実行が可能になりますが、 PHP Stormがないと処理が先に進まなくなるため、普段はコメントアウトしています
VirtualBoxの共有フォルダ設定
ここでは、以下の前提で設定します。
フォルダーのパス:D:\cygwin64\home\username
フォルダー名:Users
コンテナのマウント設定
- D:\cygwin64\home\usernameにwwwディレクトリを作成
- Docker Machine内では/Users/www/ディレクトリと共有される
- D:\cygwin64\home\username\wwwにtestプロジェクトを配置
- wwwディレクトリをコンテナ起動時に-vコマンドでマウント
docker run \
--name $DOCKER_NAME \
-v /Users/www:/var/www \
--hostname $DOCKER_NAME \
--privileged \
-d $IMAGE_NAME
PHP Stormの設定
Macの場合:PHPStorm -> Preferences... > Languages & Frameworks > PHP > Debug
Windowsの場合:File -> Settings... > Languages & Frameworks > PHP > Debug
において、以下のように設定
Preferences... > Build, Execution, Deployment > Deployment
+を押下
Connectionタブにおいて以下のように設定
Preferences... > Languages & Frameworks > PHP > Servers
+を押下
ステップ実行の設定
PHPStorm画面右上にある電話アイコンをクリックし、connectを有効にします。
※有効にすると、コンテナからローカルPC(192.168.99.1)に対して9000番ポートで通信できるようになります
$ telnet 192.168.99.1 9000
Trying 192.168.99.1...
Connected to 192.168.99.1.
Escape character is '^]'.
PhpStorm Debug設定
Run > Edit Configurations...
+を押下
PHP Remote Debugを選択
- 先ほど設定したServersを選択
- Ide key(session id)にphp.iniのxdebug.idekeyを設定
- 「OK」ボタンを押下
ステップ実行の開始
xdebug.ini設定
コンテナ内のphp.d/xdebug.iniの
xdebug.remote_autostart = On
のコメントアウトを解除します
[xdebug]
zend_extension="/usr/lib64/php/modules/xdebug.so"
xdebug.remote_enable = On
xdebug.remote_port = 9000
xdebug.remote_autostart = On
xdebug.remote_host = 192.168.99.1
xdebug.profiler_output_dir = "/tmp"
xdebug.max_nesting_level= 1000
xdebug.idekey = "PHPSTORM"
httpdを再起動します
sudo service httpd restart
ステップ実行の開始
PHP Stormでブレークポイントを設定しておくと、設定した箇所からステップ実行できるようになります。
例えば、app_controllerのbeforeFilter内にブレークポイントを設定して
http://dev.example.jp/
にアクセスすると、ブレークポイントの箇所からステップ実行が可能になります。