DockerでPHPのPeclのextensionを入れる方法

今回はDockerの公式PHPイメージでPeclを使ったextension(mailparse)を入れるのに苦労した話をします。

Pecl extensionsの入れ方

公式Dockerイメージを使う場合は、extensionを有効化するためにdocker-php-ext-*という名前のコマンド群が用意されています。

PHP Official Image

PHPにもともと入っているextensionsはDockerfile内で

docker-php-ext-install curl

とすれば入ります。

Peclの場合でもかなり簡単で、memcachedを入れようと思ったら

pecl install memcached
docker-php-ext-enable memcached

で有効にできます。

コンパイルオプションの必要なものはこのままではできない

今回はmailparseというextensionを入れようとしたのですが、ドキュメントを見ると--enable-mailparseというPHPコンパイルオプションが必要だと書いてあったので、上の方法だけでは入りません。

途方に暮れて、公式イメージのDockerfileを眺めていると$PHP_EXTRA_CONFIGURE_ARGSという変数が使われているのを発見しました。

github.com

ここに値を入れれることでオプションを追加することができます。

dockerはバージョン1.9頃から--build-argというコマンドラインオプションを提供しています。

qiita.com

ということでDockerfileには

pecl install mailparse
docker-php-ext-enable mailparse

と書いておいて、build時に

docker build . --build-arg PHP_EXTRA_CONFIGURE_ARGS="--enable-mailparse"

とすることで無事mailparseが使えるようになりました!