Dockerのphp-fpm5.6でphpredis v3系をインストールする方法

概要

  • Dockerでphp-fpm5.6のコンテナを作成
    • 単純にphpredis バージョン3系がインストールできなかった

上記について対処したことの備忘録です。どうしてもphp5.6系を使わないといけない方には役立つかもしれません。

古いバージョンを使う事によるセキュリティ的な脆弱性とかについてはスルーしてください。

はじめに

数年前に作ったWebアプリケーションのサーバー移管をしました。このWebアプリケーションはnginxとphp-fpm、redisで構成されています。

このときバージョンアップをしようと思いましたが、WebフレームワークがPHP7系に対応していなかったり、移管期間が短いなどの都合でPHPやRedisのバージョンを変更しないで移管対応をすることになった経緯があります。

移管を行うにしてもローカル開発環境で動作確認が行いたかったので、Dockerで環境作成を行なった際、古いRedisがなかなかインストールできませんでした。その対応を記載します。

対応

Dockerfile

まず以下が対応結果です。

FROM php:5.6-fpm

RUN apt update
RUN apt -y upgrade
RUN apt -y install \
    tar unzip sudo vim less procps wget gnupg2 \
    git 


# install phpredis
RUN git clone https://github.com/phpredis/phpredis.git 
    /tmp/phpredis \
    && cd /tmp/phpredis \
    && git checkout -b 3.1.6 refs/tags/3.1.6 \
    && phpize \
    && ./configure \
    && make \
    && make install \
    && echo "extension=redis.so" > /usr/local/etc/php/conf.d/redis.ini

COPY ./config/php.ini-development /usr/local/etc/php/php.ini

VOLUME ["/var/run/php-fpm"]

git をインストール

後述のコンパイルに必要です。

RUN apt -y install \
    tar unzip sudo vim less procps wget gnupg2 \
    git 

phpredisのバージョンを指定してコンパイルする

githubにてphpredisのリポジトリを確認して、インストールしたいRedisのバージョンタグを探してください。
今回は3.1.6を選択しました。

RUN git clone https://github.com/phpredis/phpredis.git 
    /tmp/phpredis \
    && cd /tmp/phpredis \
    && git checkout -b 3.1.6 refs/tags/3.1.6 \
    && phpize \
    && ./configure \
    && make \
    && make install \
    && echo "extension=redis.so" > /usr/local/etc/php/conf.d/redis.ini


php-fpmのdockerコンテナにログインしてライブラリが作成されていることを確認

$ find / -name "*redis*" | grep .so

# 結果
/usr/local/lib/php/extensions/no-debug-non-zts-20131226/redis.so
/tmp/phpredis/.libs/redis.so
/tmp/phpredis/modules/redis.so


redisモジュールが有効になっていることを確認

$ php -m | grep redis

# 結果
redis

参考

stackoverflow.com