docker-php-ext-* について

CentOS イメージからどうしても Apache が起動できず、諦めて PHP の公式イメージから構築する方向に着手したところ、見慣れないものを見付けたのでメモしておきます。

この辺りを参考にしつつ、手動でパッケージを確認しながらインストールしてみます。

準備

> docker run -it php:7.3-apache /bin/bash

## 略

root@XXXXXXXXXXXX:/var/www/html#

コンテナに入ります。

# apt-get update
Get:1 http://security.debian.org/debian-security buster/updates InRelease [65.4 kB]
Get:2 http://deb.debian.org/debian buster InRelease [121 kB]
Get:3 http://deb.debian.org/debian buster-updates InRelease [51.9 kB]
Get:4 http://security.debian.org/debian-security buster/updates/main amd64 Packages [270 kB]
Get:5 http://deb.debian.org/debian buster/main amd64 Packages [7907 kB]
Get:6 http://deb.debian.org/debian buster-updates/main amd64 Packages [7860 B]
Fetched 8424 kB in 3s (2736 kB/s)
Reading package lists... Done

リポジトリの update 。

# apt-get install -y libfreetype6-dev
Reading package lists... Done

## 略

Setting up libfreetype6-dev:amd64 (2.9.1-3+deb10u2) ...
Processing triggers for libc-bin (2.28-10) ...


# apt-get install -y libjpeg62-turbo-dev
Reading package lists... Done

## 略

Setting up libjpeg62-turbo-dev:amd64 (1:1.5.2-2+deb10u1) ...
Processing triggers for libc-bin (2.28-10) ...

apt-get でパッケージを入れます。

# exit

ここでいったんコンテナから抜けてホスト側に戻り……。

> docker commit XXXXX_XXXXXXXX httpd_deb_man

commit 。

> docker run -it httpd_deb_man /bin/bash

指定した名前で再びコンテナを走らせ、入ります。

検証

さて、参考記事ではこの後 docker-php-ext-install なるコマンドを実行しているのですが……。

mysqli is a part of php-src. Any extension contained in php-src doesn’t need any additional packages if you use PHP docker image. You need just to use

docker-php-ext-install mysqli

phpのイメージでapt-getは動作しませんでした、代わりにdocker-php-ext-installでモジュールを追加します。

私も最初同じように apt-get で PHP のモジュールをインストールしようとして、ひたすら

E: Unable to locate package mysqli

のように Unable to locate package エラーを大量に発生させていました……。しかも

ここでパッケージを探し始めて「あるはずなのにインストールできない……」とかやっていました。

Possible values for ext-name:
bcmath bz2 calendar ctype curl dba dom enchant exif fileinfo filter ftp gd gettext gmp hash iconv imap interbase 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 recode reflection session shmop simplexml snmp soap sockets sodium spl standard sysvmsg sysvsem sysvshm tidy tokenizer wddx xml xmlreader xmlrpc xmlwriter xsl zend_test zip

ちなみに docker-php-ext-install でインストールできるのはこれらのパッケージの模様。存在しないパッケージをインストールしようとして表示されるエラー文より。

こちらの記事に書いてあるように Xdebug は別途指定が必要の模様。

FROM php:7.4-cli
RUN pecl install redis-5.1.1 \
    && pecl install xdebug-2.8.1 \
    && docker-php-ext-enable redis xdebug

それから、 gd はまた別途指定がありそうです。

……結構前に Rasbian で apt-get を触って以来だったので、エコシステムが変わる + Docker 固有の事情が絡んでド嵌まりしました……。

参考

docker-php-ext-* を調べ始めたきっかけ

docker-php-ext-*

gd

imagick

docker-compose の参考

Debian のパッケージ・リポジトリ

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。