[Docker] Alpineベースの公式PHPイメージにImagickをインストールする

  • このエントリーをはてなブックマークに追加

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

以上です、お疲れ様でした。

  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。




コメントを残す