• Docker Hub: https://hub.docker.com/_/php
  • GitHub: https://github.com/docker-library/php/tree/master
  • ベースイメージ:php:8.1-fpm-bullseye
  • ベースイメージ GitHub:https://github.com/docker-library/php/tree/master/8.1/bullseye/fpm
  • ベースイメージOS:Debian GNU/Linux 11 (bullseye)
$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

PHP関連ファイル

ベースイメージのディストリビューションによりますが Debian 系 は/usr/local/etc/php に配置されます。

拡張モジュール(extension)のインストール方法

拡張モジュールのインストール方法は大きく 3 種類あります。

  • docker-php-ext-install でインストール
  • pecl install でインストール
  • pear install でインストール

どの拡張モジュールが PECL かは 所属 > PECL 拡張 で確認できます。
上記に記載のない PECL パッケージもあるので https://pecl.php.net/ で検索してください(例 gRPC)。

docker-php-ext-install でインストール

RUN docker-php-ext-install pdo_mysql

/usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini が作成されます(docker-php-ext-enable を実行する必要はありません)。

docker-php-ext-install でインストールできる拡張モジュールを確認

container$ docker-php-ext-install --help
usage: /usr/local/bin/docker-php-ext-install [-jN] [--ini-name file.ini] ext-name [ext-name ...]
   ie: /usr/local/bin/docker-php-ext-install gd mysqli
       /usr/local/bin/docker-php-ext-install pdo pdo_mysql
       /usr/local/bin/docker-php-ext-install -j5 gd mbstring mysqli pdo pdo_mysql shmop

if custom ./configure arguments are necessary, see docker-php-ext-configure

Possible values for ext-name: # <========================================================= ここに記載
bcmath bz2 calendar ctype curl dba dl_test dom enchant exif ffi fileinfo filter ftp gd gettext gmp hash iconv imap intl json ldap mbstring mysqli oci8 odbc opcache pcntl pdo pdo_dblib pdo_firebird pdo_mysql pdo_oci pdo_odbc pdo_pgsql pdo_sqlite pgsql phar posix pspell readline reflection session shmop simplexml snmp soap sockets sodium spl standard sysvmsg sysvsem sysvshm tidy tokenizer xml xmlreader xmlwriter xsl zend_test zip

Some of the above modules are already compiled into PHP; please check
the output of "php -i" to see which modules are already loaded.

PECL でインストール

# インストール
RUN pecl install grpc
# 有効化(もしくは php.ini で有効化)
RUN docker-php-ext-enable grpc 

pecl でインストールした拡張モジュールは、自動では有効化されません。
以下のどちらかで有効化します。
※ 両方実行すると Module "xxxxx" is already loaded が発生するのでどちらか一方にします。

  • RUN docker-php-ext-enable grpc
  • ini ファイルで有効化(例 php.ini に記載して /usr/local/etc/php.ini に配置)

例)

[PHP]
memory_limit = 512M
max_execution_time = 300

[Date]
date.timezone = "Asia/Tokyo"

[Extentions]
extension=grpc.so

どの拡張モジュールが PECL かは 所属 を参考にしてください。

docker-php-ext-xxx

  • docker-php-ext-configure
  • docker-php-ext-install:拡張モジュールをインストール
  • docker-php-ext-enable:PECL拡張モジュールを有効化する

docker-php-ext-configure

拡張モジュールのインストールに関するの設定をします(必要がない場合が多いです)。

docker-php-ext-configure gd –with-freetype –with-jpeg

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

各拡張モジュールで指定できるオプションは PHP 公式マニュアルを参照してください。
GD の場合は https://www.php.net/manual/ja/image.installation.php を参照してください。

docker-php-ext-install

拡張モジュールをインストール&有効化します。
docker-php-ext-install でインストールできる拡張モジュールは docker-php-ext-install --helpで確認できます。

  1. 拡張モジュールをインストール
  2. 拡張モジュールをを有効化
    • ini ファイルが所定の場所に自動で作成されます(例 pdo_mysql: /usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini)

docker-php-ext-enable

拡張モジュールを有効化します( ini ファイルを作成)。
docker-php-ext-install でインストールした拡張モジュールは自動で有効化されるので、 PECL でインストールした拡張モジュールに対して実行します。

iniファイル

  • 基本 PHP コンパイル時の –with-config-file-scan-dir で指定したディレクトリをスキャンする
  • 同一ディレクトリではアルファベット順に読み込む。
  • 後から読み込まれた ini ファイルの設定が優先される
  • ini ファイルの読み込み順は php --ini で確認できる。

例) /usr/local/etc/php/conf.d/docker-php-ext-opcache.ini と /usr/local/etc/php/conf.d/php.ini の場合は以下順序で読み込まれます。 設定が重複している場合は、後から読み込んだ内容が優先されます。

  1. /usr/local/etc/php/conf.d/docker-php-ext-opcache.ini
  2. /usr/local/etc/php/conf.d/php.ini

ref.