DockerのPHPイメージにxdebugをインストール

ここではDockerのPHPのイメージへxdebugをインストールすることを試していきます。

PHPイメージの取得

まずは、phpのイメージを取得しておきたいと思います。

公式

公式のイメージは以下に記載されています。

https://hub.docker.com/_/php

コマンド

コマンドは公式サイトに載っている通り以下を実行します。

docker pull php

実行

コマンドを実行すると以下のようになりました。

$ docker pull php
Using default tag: latest
latest: Pulling from library/php
bc51dd8edc1b: Pull complete
a3224e2c3a89: Pull complete
be7a066df88f: Pull complete
bfdf741d72a9: Pull complete
ff9fc07eebd4: Pull complete
669e424fd246: Pull complete
b2d37f53b7e3: Pull complete
4d87d4b3feb8: Pull complete
d81f0fa01716: Pull complete
Digest: sha256:005e3ccd42cdb97fc609c9732708207f03729822202dab0647168e8f937e7d48
Status: Downloaded newer image for php:latest
docker.io/library/php:latest
$

結果確認

イメージが取得できていることを確認しておきます。

$ docker image ls php
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
php                 latest              7dc31b4f3403        7 days ago          405MB
$

無事にphpのDockerイメージが取得できました。

手動でインストール

ここでは手動で一つ一つインストールや設定していきます。

コンテナの起動とログイン

まずはコンテナを起動しログインします。コマンドは以下です。

docker run -t -i php:latest /bin/bash

以下は実行例です。

$ docker run -t -i php:latest /bin/bash
root@8c838a47d2f8:/#

xdebugインストール

ログインしたら次はxdebugをインストールをします。コマンドは以下になります。

pecl install xdebug

以下が実行例です。

root@8c838a47d2f8:/# pecl install xdebug
downloading xdebug-2.9.2.tgz ...
Starting to download xdebug-2.9.2.tgz (242,959 bytes)
..................................................done: 242,959 bytes

…(略)…

Build process completed successfully
Installing '/usr/local/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so'
install ok: channel://pecl.php.net/xdebug-2.9.2
configuration option "php_ini" is not set to php.ini location
You should add "zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so" to php.ini
root@8c838a47d2f8:/#

インストール状況確認

xdebugのインストールはできました。ただし、設定を確認してみても分かりますが、この時点ではまだ有効にはなっていません。

root@8c838a47d2f8:/# php -i | grep xdebug
root@8c838a47d2f8:/#

そのため、次はxdebugを有効にします。

xdebugの有効化

xdebugの有効化は「docker-php-ext-enable」で実施できます。

docker-php-ext-enable xdebug

以下は実行例です。

root@8c838a47d2f8:/# docker-php-ext-enable xdebug
root@8c838a47d2f8:/#

xdebugの有効化(手動)

ここでは「docker-php-ext-enable」を使わずにxdebugを有効化していきます。

「docker-php-ext-enable」を使って有効化した人は無視して大丈夫です。あまり使う機会は無いと思いますが、もし「docker-php-ext-enable」が使えない環境があれば使えるかもしれません。

php.ini作成

cd /usr/local/etc/php/
cp php.ini-development php.ini
echo "zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so" >> php.ini

公式のphpのイメージだと特に再起動なくphp.iniを作成するだけで良いようです。

「xdebug.so」のパスは上記とは異なる可能性があります。xdebugのインストール時の出力に以下のような行があると思います。このパスを指定してください。

You should add "zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so" to php.ini

xdebugが有効化できたことの確認

再度、設定を確認してみます。

root@8c838a47d2f8:/# php -i | grep xdebug
/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
xdebug
xdebug support => enabled
Support Xdebug on Patreon, GitHub, or as a business: https://xdebug.org/support

…(略)…

有効化できていることが確認できました。

Dockerfileでインストール

ここではDockerfileを使ってインストールしていきます。と言ってもほぼファイルを用意するだけです。

Dockerfile作成

Dockerfileを作成します。今回は以下のようなファイルを用意しました。

FROM  php:7.4.2

RUN pecl install xdebug-2.9.1 && docker-php-ext-enable xdebug

phpとxdebugのバージョンの組み合わせでインストールが失敗することがあるので、上記はバージョンを固定していますが、最新のバージョンで大丈夫です。

ビルドコマンド実行

以下のコマンドでDockerfileをビルドします。

docker build -t {イメージ名} {Dockerfileのディレクトリ}

実際に実行した結果が以下です。

$ docker build -t my-php .
Sending build context to Docker daemon  3.072kB
Step 1/2 : FROM  php:7.4.2
 ---> 7dc31b4f3403
Step 2/2 : RUN pecl install xdebug-2.9.1 && docker-php-ext-enable xdebug
 ---> Running in ee624f50b545
downloading xdebug-2.9.1.tgz ...
Starting to download xdebug-2.9.1.tgz (243,652 bytes)
..................................................done: 243,652 bytes

…(略)…

Build process completed successfully
Installing '/usr/local/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so'
install ok: channel://pecl.php.net/xdebug-2.9.1
configuration option "php_ini" is not set to php.ini location
You should add "zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so" to php.ini
Removing intermediate container ee624f50b545
 ---> 11cec75800dd
Successfully built 11cec75800dd
Successfully tagged my-php:latest
$

イメージが作成されました。

$ docker image ls my-php
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
my-php              latest              11cec75800dd        8 minutes ago       408MB
$

作成したイメージからコンテナ起動

先ほど作成したカスタムイメージを起動してログインします。

$ docker run -it my-php:latest /bin/bash
root@eceba8436bbb:/#

xdebugの状態確認

作成したカスタムイメージの設定を確認してみます。

root@eceba8436bbb:/# php -i | grep xdebug
/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
xdebug
xdebug support => enabled
Support Xdebug on Patreon, GitHub, or as a business: https://xdebug.org/support

…(略)…

きちんとxdebugの設定が有効になっていることが確認できました。

コメント

タイトルとURLをコピーしました