DockerHubにある公式のPHPイメージにImageMagick
のPECL拡張であるImagick
をインストールしてみます。
FPM版PHP7.1でベースはAlpine Linuxのもの(php:7.1-fpm-alpine)を使った例になります。
GD
やら大抵よく使う拡張はdocker-php-ext-install
とかのバッチでインストールできるようになっているのですが、Imagickはそのようになっていませんでした。
一応PECLでインストール可能なので、それに必要になる手順の説明になります。
特別な事やってるわけでもないので割と普通の手順ですが、Dockerfile作るときの参考にでもしてください。
ビルド用パッケージのインストール
まずはシェルを起動します。この辺の具体的な方法は割愛します。
ImageMagickとImagickをビルドするために必要なパッケージを揃えます。apk
コマンドを使います。
これらは後で破棄するので、--virtual
オプションで名前を付けておきます。
# apk add --no-cache --virtual build-dependencies gcc make autoconf libc-dev libtool
ImageMagickのインストール
そしたらImageMagick本体をインストールします。
Alpineの標準パッケージを使いたいところなのですが、それを使うとなぜかSegmentation fault
が発生してしまうので、新しいバージョンのImagickを自前ビルドします。
まずはapk
コマンドで必要なライブラリを追加します。これは用途に応じて選定してください。
ビルド時だけ必要なものは先のbuild-dependencies
に加えておきます。
libgomp
はImagickでOpenMP使わないならば要らなかったりする?
# apk add --no-cache libpng libjpeg libgcc libgomp
# apk add --no-cache --virtual build-dependencies jpeg-dev libpng-dev
そしたらソースのダウンロードと伸長。
# mkdir ~/src
# cd ~/src
# wget https://github.com/ImageMagick/ImageMagick/archive/7.0.7-28.tar.gz
(中略)
# tar zxvf 7.0.7-28.tar.gz
(中略)
# ls
7.0.7-28.tar.gz ImageMagick-7.0.7-28
configure
してmake
。
オプションなんかは適宜調節してください。
# cd ImageMagick-7.0.7-28
# ./configure
(中略)
# make -j4 && make install
(中略)
バージョンを確認してみます。
# convert --version
Version: ImageMagick 7.0.7-28 Q16 x86_64 2018-05-07 http://www.imagemagick.org
Copyright: © 1999-2018 ImageMagick Studio LLC
License: http://www.imagemagick.org/script/license.php
Features: Cipher DPC HDRI OpenMP
Delegates (built-in): jng jpeg png zlib
Imagickのビルド
pecl
コマンドを叩きます。
# pecl install imagick
downloading imagick-3.4.3.tgz ...
Starting to download imagick-3.4.3.tgz (245,410 bytes)
.........................................done: 245,410 bytes
19 source files, building
running: phpize
Configuring for:
PHP Api Version: 20160303
Zend Module Api No: 20160303
Zend Extension Api No: 320160303
Please provide the prefix of Imagemagick installation [autodetect] :
ここでImagemagickのインストール場所を聞かれますが、そのままエンターでOKです。
あとはビルドプロセスが実行されます。すぐ完了するでしょう。
(中略)
Build process completed successfully
Installing '/usr/local/lib/php/extensions/no-debug-non-zts-20160303/imagick.so'
Installing '/usr/local/include/php/ext/imagick/php_imagick_shared.h'
install ok: channel://pecl.php.net/imagick-3.4.3
configuration option "php_ini" is not set to php.ini location
You should add "extension=imagick.so" to php.ini
Imagickモジュールの読み込み設定
上記のとおり、/usr/local/lib/php/extensions/no-debug-non-zts-20160303/imagick.so
がインストールされたので、PHPで読み込まれるように設定します。
/usr/local/etc/php/conf.d
にimagick.ini
ファイルを作成します。
# echo "extension=imagick.so" > /usr/local/etc/php/conf.d/imagick.ini
ちゃんと読み込まれるか確認してみます。
# php -i | grep imagick
Additional .ini files parsed => /usr/local/etc/php/conf.d/imagick.ini
imagick
imagick module => enabled
imagick module version => 3.4.3
imagick classes => Imagick, ImagickDraw, ImagickPixel, ImagickPixelIterator, ImagickKernel
imagick.locale_fix => 0 => 0
imagick.progress_monitor => 0 => 0
imagick.skip_version_check => 0 => 0
後片付け
# cd
# rm -rf ~/src
# apk del --purge build-dependencies
以上です、お疲れ様でした。
コメント