#
ドキュメント

Document

自分のための備忘録です。

イメージ

$ 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関連ファイル

/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.