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 はまた別途指定がありそうです。
- Docker 公式 PHP 7.4 イメージで GD ライブラリをインストールする方法 / Twin Turbo Computing
- Docker 公式 PHP 7.4 の GD インストールまとめ / Twin Turbo Computing
……結構前に Rasbian で apt-get
を触って以来だったので、エコシステムが変わる + Docker 固有の事情が絡んでド嵌まりしました……。
参考
docker-php-ext-* を調べ始めたきっかけ
- docker-composeでPHP,apache,Mysqlの環境構築 – Qiita
- docker-composeでPHP開発環境 – Qiita
- docker unable to locate package trying to install php extension mysqli – Stack Overflow
docker-php-ext-*
gd
- Docker 公式 PHP 7.4 イメージで GD ライブラリをインストールする方法 / Twin Turbo Computing
- Docker 公式 PHP 7.4 の GD インストールまとめ / Twin Turbo Computing
imagick
docker-compose の参考
- docker-compose で PHP7.2 + Apache + MySQL + phpMyAdmin 環境を構築 – Qiita
- Docker Compose で PHP 7.0 の開発環境を構築する – Qiita
- docker-compose を用いて Apache・PHP・MySQL の開発環境を構築してみた – Qiita