PHP 拡張モジュール | Docker
- 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で確認できます。
- 拡張モジュールをインストール
- 拡張モジュールをを有効化
- ini ファイルが所定の場所に自動で作成されます(例 pdo_mysql:
/usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini)
- ini ファイルが所定の場所に自動で作成されます(例 pdo_mysql:
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 の場合は以下順序で読み込まれます。
設定が重複している場合は、後から読み込んだ内容が優先されます。
/usr/local/etc/php/conf.d/docker-php-ext-opcache.ini/usr/local/etc/php/conf.d/php.ini
ref.