PHP 5.6のDockerイメージにRedisをインストール


なぜ、いまさらPHP5.6というのは置いといて、PHP5.6のDockerイメージにphpredisをインストールしてみたので、そのメモです。

FROM php:5.6-apache
RUN apt update &&\
    apt install -y git unzip curl make gcc

WORKDIR /usr/src/php/ext
RUN git clone -b 4.2.0 https://github.com/phpredis/phpredis.git &&\
    mv phpredis redis &&\
    docker-php-ext-install redis

RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" &&\
    sed -i -e 's/session\.save_handler.*/session\.save_handler = redis/' $PHP_INI_DIR/php.ini &&\
    echo 'session.save_path = tcp://redis:6379' >> $PHP_INI_DIR/php.ini

PHPのセッション

PHPのSESSIONはデフォルトだとファイルシステムが利用されます。
上述の最後の3行でセッションのデータストアにRedisを使うように変更しています。
sed を使っているのでわかりにくいかもしれませんが、php.ini のセッションの設定を次のように変更しています。

session.save_handler = redis
session.save_path = tcp://redis:6379

動作確認

$ docker build -t php .
$ docker run -it --rm php /bin/sh
# php
<?php
$redis = new Redis();
$redis->connect('redis', 6379);
$redis->set('hoge', 'fuga');
echo $redis->get('hoge');
[Ctrl+D]
foge#