Edited at

KUSANAGI RODのphp7でphp-gdのJPEGを有効にする

More than 1 year has passed since last update.

Dockerfile書き換え。

DockerでConoHaのインスタンスを建てて、KUSANAGI(Wordpress)を導入するの番外編。


問題発生


画像をアップロードした時に別のサイズが作られない

Wordpressに画像をアップロードすると、アイキャッチ用やモバイル用など様々なサイズの画像が自動で生成されます。

なぜかjpegの時だけ作られていませんでした。ナゼ。


とりあえずググる。

GDってのが使われているらしいぞ。


php infoを見てみる

GDのところを見るが、PNGやGIFなどの表記があるのにJPEGはない。


普通にインストールしたGDでは、JPEGは扱えないらしい

php再インストールからやらなきゃかな...


Dockerfileを探す

前の記事で示したdocker-compose.ymlから、dockerイメージの元となるDockerfileを探します。


docker-compose.yml

...

kusanagi-php7
image: primestrategy/kusanagi-php7:7.0.6-1
...

dockerhub の primestrategy/kusanagi-php7を確認します。

(URLが明示されていないときはdockerhubから取ってくる仕様らしいです)

https://hub.docker.com/r/primestrategy/kusanagi-php7/

Source Repository にgithubのリンクがあったので確認します。

それっぽいのでクローンしてみます。

$ git clone --depth 1 --single-branch https://github.com/prime-strategy/kusanagi-php7.git


コンテナをビルドしてみる

とりあえずクローンしてきたDockerfileを使ってコンテナをビルドしてみます。

$ ls

Dockerfile
$ docker build .


残念...

エラーが出ました。


原因

Dockerfileで指定されているmariadbのバージョンが古いためでした。

(この確認のために && で繋がれているコマンドを一行ずつに分けて記述してビルドしたりしました。他にいい方法があれば教えて...)

apk(alpineのパッケージ管理ツール)でとってこれるバージョンが変わってしまっているようです。


改善

本当であれば指定されていたmariadbのバージョンのソースを取ってきてビルドした方が良いと思います。

面倒なので今回はmysqlのバージョンを指定しないようにします。


Dockerfile

-ARG MYSQL_VERSION=10.1.21-r0

+# ARG MYSQL_VERSION=10.1.21-r0
...
- mariadb=$MYSQL_VERSION \
- mariadb-dev=$MYSQL_VERSION \
+ # mariadb=$MYSQL_VERSION \
+ # mariadb-dev=$MYSQL_VERSION \
+ mariadb \
+ mariadb-dev \


再度ビルドしてみる

今度は上手くいった。

(warningはたくさん出ているけども...とりあえず大丈夫なはず...)

$ ls

Dockerfile
$ docker build .


gdのjpeg利用設定

docker-php-ext-installの前にgdでjpegを使用する設定のコマンドを書いておきます。

--with-jpeg-dirにつけるパスが、なぜ/usrで良いのかはよくわからなかった...


Dockerfile

     ...

+ && docker-php-ext-configure gd --with-jpeg-dir=/usr \
&& docker-php-ext-install \
...


ビルドする

-t でイメージに名前をつけています。

$ ls

Dockerfile
$ docker build . -t php7-enable-jpeg


ちゃんとgdのjpegサポートができているか確認

$ docker run -it --rm php7-enable-jpeg /bin/sh

/var/www/html # php --info | grep -A10 GD
...
JPEG Support => enabled
...


docker-compose.ymlを書き換える

build: context にDockerfileのあるディレクトリまでのパスを書いてください


docker-compose.yml

...

- image: primestrategy/kusanagi-php7:7.0.6-1
+ build:
+ context: [path/to/Dockerfile/directory]


後は前の記事に沿って実行する

前の記事の「docker-machineの情報を設定する」くらいが続きになるはずです。

頑張ってください!


参考