How to install php-redis extension using the official PHP Docker image approach?

I want to build my PHP-FPM image with php-redis extension based on the official PHP Docker image, for example, using this Dockerfile: php:5.6-fpm.

The docs say that I can install extensions this way, installing dependencies for extensions manually:

  • Export on nodejs alpine docker image is not accepted
  • Secure alternatives to DiD or the UNIX socket?
  • Docker failed to fetch http://deb.debian.org/debian/dists/jessie/InRelease
  • Which Docker base image should be used to install Apps in a container without any additional OS?
  • Docker run with pseudoTTY (-t) gives instant stdout, buffering happens without it
  • pm2 not start apps on server with Process config loading failed []
  • FROM php:5.6-fpm
    # Install modules (iconv, mcrypt and gd extensions)
    RUN apt-get update && apt-get install -y \
            libfreetype6-dev \
            libjpeg62-turbo-dev \
            libmcrypt-dev \
            libpng12-dev \
        && docker-php-ext-install iconv mcrypt \
        && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
        && docker-php-ext-install gd
    CMD ["php-fpm"]
    

    Without Docker I installed it with apt-get install php5-redis. But how can I install it using the approach above?

  • DockerToolbox1.11.2.exe Not running on 64bit Win7
  • Docker: Container command '/bin/sh' not found
  • AWS Docker deployment
  • Docker/virtualisation and HDFS
  • Mounting local directory in docker container on Windows fails silently
  • docker: Command “/bin/sh” not found
  • 8 Solutions collect form web for “How to install php-redis extension using the official PHP Docker image approach?”

    Based on @starikovs answer. I added a variable for docker style.

    # install phpredis extension
    ENV PHPREDIS_VERSION 2.2.7
    
    RUN curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/$PHPREDIS_VERSION.tar.gz \
        && tar xfz /tmp/redis.tar.gz \
        && rm -r /tmp/redis.tar.gz \
        && mv phpredis-$PHPREDIS_VERSION /usr/src/php/ext/redis \
        && docker-php-ext-install redis
    

    Redis is not an extension that is included in “php-src”, therefore you cannot use docker-php-ext-install. Use PECL:

    RUN pecl install -o -f redis \
    &&  rm -rf /tmp/pear \
    &&  docker-php-ext-enable redis
    

    I’ve found two ways to install php-redis extension for official php-fpm Docker image. Here they are:

    The first way is to compile redis from sources and install.

    RUN curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/2.2.7.tar.gz \
        && tar xfz /tmp/redis.tar.gz \
        && rm -r /tmp/redis.tar.gz \
        && mv phpredis-2.2.7 /usr/src/php/ext/redis \
        && docker-php-ext-install redis
    

    docker-php-ext-install script is included in php-fpm image and can compile extensions and install them.

    The second way you can do it is with PECL.

    As TimWolla answered, you can do it with PECL, but in my case, PECL isn’t installed by default.

    RUN pecl install -o -f redis \
    &&  rm -rf /tmp/pear \
    &&  echo "extension=redis.so" > /usr/local/etc/php/conf.d/redis.ini
    

    Slightly revised version of starikovs and skyred answers for the current PHP 7 version of the docker image (tested on php:7.0.8-fpm-alpine and php:7.0.8-alpine).

    Uses the newly released 3.0 version (June 2016) for PHP 7.

    ENV PHPREDIS_VERSION 3.0.0
    
    RUN mkdir -p /usr/src/php/ext/redis \
        && curl -L https://github.com/phpredis/phpredis/archive/$PHPREDIS_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/redis --strip 1 \
        && echo 'redis' >> /usr/src/php-available-exts \
        && docker-php-ext-install redis
    

    If you want to use redis as session handler;

    RUN { \
        echo 'session.save_handler = redis'; \
        echo 'session.save_path = tcp://redis:6379'; \
    } >> /usr/local/etc/php/conf.d/docker-php-ext-redis.ini
    

    If you want to use redis extension with PHP 7 in 2015 (borrowed from skyred’s answer);

    ENV PHPREDIS_VERSION php7
    
    RUN curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/$PHPREDIS_VERSION.tar.gz \
        && tar xfz /tmp/redis.tar.gz \
        && rm -r /tmp/redis.tar.gz \
        && mv phpredis-$PHPREDIS_VERSION /usr/src/php/ext/redis \
        && docker-php-ext-install redis
    

    My opinion, the easiest way is:

    RUN pecl install redis && docker-php-ext-enable redis

    😉

    I’m using combination of PECL and PHP official docker extension script

    RUN pecl bundle -d /usr/src/php/ext redis \
    && rm /usr/src/php/ext/redis-*.tgz \
    && docker-php-ext-install redis
    

    For PHP7 you need to wait for official redis pecl release or use git:

    RUN apt-get update \
    && apt-get install git -y -q \
    && git clone -b php7 https://github.com/phpredis/phpredis.git /usr/src/php/ext/redis \
    && docker-php-ext-install redis
    

    Slightly revised version of starikovs and skyred answers for current version of the docker image.
    Tested on php:5-fpm-alpine

    # install phpredis extension
    ENV PHPREDIS_VERSION 2.2.8
    
    ADD https://github.com/phpredis/phpredis/archive/$PHPREDIS_VERSION.tar.gz /tmp/redis.tar.gz
    RUN tar xzf /tmp/redis.tar.gz -C /tmp \
        && mkdir -p /usr/src/php/ext \
        && mv /tmp/phpredis-$PHPREDIS_VERSION /usr/src/php/ext/redis \
        && echo 'redis' >> /usr/src/php-available-exts \
        && docker-php-ext-install redis \
        && rm -rf /usr/src/php/ext/redis
    
    Docker will be the best open platform for developers and sysadmins to build, ship, and run distributed applications.