今回は、DockerのコンテナでPHPを実行している際に、
VSCode側でデバッグ実行できる様にするための設定メモとなります。
尚、Docker for Desktop(win/mac)を利用している想定で、
yamlやiniファイルの内容を指定しています。
Docker for Desktopを利用していない場合、
Dockerのコンテナから、ホストOS上のプロセスと通信する為の指定を、
調整する必要がありますのでご注意ください。
目次
環境
・OS:mac OS Catalina 10.15.6
・VSCode:1.44.2 Microsoft Visual Studio Code
・Docker for Desktop:3.2.1(61626)
・Docker : 20.10.5, build 55c4c88
・docker-compose version 1.28.5, build c4eb3a1f
PHP.ini 作成
PHPの設定ファイルを作成します。
今回は、iniというフォルダに配置します。
display_errors = On display_startup_errors = On max_execution_time = 30 session.gc_divisor = 1000 session.sid_bits_per_character = 5 output_buffering = 4096 memory_limit = 128M upload_max_filesize = 64M post_max_size = 64M max_input_vars = 1000 log_errors = On error_log = /dev/stderr error_reporting = E_ALL expose_php = On zend.exception_ignore_args = Off [Date] date.timezone = "Asia/Tokyo" [mbstring] mbstring.language = Japanese [mysqlnd] mysqlnd.collect_memory_statistics = On [assertion] zend.assertions = 1
xdebug用 iniファイル作成
続けて、xdebug用のiniファイルも作成します。
ファイル名は、xdebug.iniとします。
Docker for Desktopを利用している場合、
ホストアドレスの指定を、host.docker.internalとします。
※Docker for Desktopを利用しない場合、アドレスやDNS名を指定します。
Docker-docs-ja コンテナからホスト上のサービスに対して接続したい
portの指定なども行いますので、重複しない任意の数字を指定して頂ければと思います。
[xdebug] xdebug.client_host=host.docker.internal xdebug.client_port=9004 xdebug.start_with_request=yes xdebug.mode=debug
Dockerfile 作成
Dockerfileは、プロジェクト配下に作成します。
FROM php:8-apache
WORKDIR /var/www/html
# PHP実行・デバッグで必要なライブラリをインストール
RUN apt-get update \
&& apt-get install -y libonig-dev libzip-dev unzip \
&& docker-php-ext-install mbstring zip bcmath \
&& pecl install xdebug \
&& docker-php-ext-enable xdebug
# 挙動確認用ファイルと、設定ファイルをコピー
COPY ./src /var/www/html
COPY ./ini/php.ini /usr/local/etc/php/php.ini
COPY ./ini/xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini
docker-compose.yaml 作成
docker-compose.yamlも、プロジェクト配下に作成します。
version: "3"
services:
app:
build:
context: .
dockerfile: .
volumes:
- ./src:/var/www/html
ports:
- "8010:80"
Docker-docs-ja – Compose ファイル・リファレンス –
デバッグ確認用 PHPファイル作成
挙動確認用のファイルを、srcフォルダに配置します。
VSCode デバッグ 設定ファイル 調整
続けて、VScodeのデバッグ設定ファイルを作成して、調整していきます。
RUN AND DEBUGのcreate a launch.json fileをクリックすると、
設定ファイルであるlaunch.jsonが自動生成される為、まずはこのボタンをクリックします。
種類の選択候補が表示されたら今回は、PHPを選択します。
launch.jsonは、.vscodeフォルダに生成されます。
生成されたlaunch.jsonを、以下の様に修正します。
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9004,
"pathMappings": {
"/var/www/html": "${workspaceRoot}/src/"
}
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9000
}
]
}
ポート番号は、使用されていない任意の番号に変更します。
※xdebug.iniで指定している番号と統一します。
また、pathMappingsで、コンテナ内のアプリケーションフォルダと、
ローカルのPHP配置フォルダを指定して紐付けます。
"port": 9004,
"pathMappings": {
"/var/www/html": "${workspaceRoot}/src/"
}
デバッグ
準備が整ったら、挙動を確認します。
まずは、docker-compose.yamlが存在する場所で、以下のコマンドを実行してコンテナを起動します。
docker-compose up -d
コンテナサービスが起動したら、VSCode側もデバッグをONにします。
RUN AND DEBUGの部分から、開始(Start Debugging)ボタンをクリックします。
確認するために、ブレークポイントの設置も行います。
全て準備ができたら、ブラウザを開いて、URLを指定してアクセスします。
http://localhost:8010/
ブレークポイントを設置した位置で、処理が停止します。
ステップ実行等で、全ての処理を流し切れば、ブラウザの表示が行われます。
試しに、indexファイル以外にもアクセスし挙動を確認します。
デバッグ終了
VSCodeの停止ボタンで、デバッグを終了します。
また、コンテナ停止も行います。
docker-compose stop
尚、dockerのイメージとコンテナは、停止しても残り続ける為、
不要であれば、コマンドやdocker for desktopのところで削除を行います。
今回のメモは以上となります。
dockerでも快適にデバッグを行うことができます。
尚、元々PHPとMySQLのコンテナを動作させる想定で、
設定を構想していた為、こちらのメモもdocker-composeを利用する方法でメモしていますが、
メモの内容を再現すると、コンテナは1つ(PHPのコンテナ)しか動作させていません。
単一のコンテナを動作させる場合、通常のdockerコマンドでも動作可能な為、
不要なファイルを作成したくない方は、
yamlを作成せず、php.ini内のmysqlndは排除して、
実行コマンドもdocker-composeではなく、dockerコマンドを実行頂ければと思います。























