¿Cómo instalar la extensión php-redis usando el enfoque de imagen oficial de PHP Docker?

4 minutos de lectura

Quiero construir mi imagen PHP-FPM con php-redis extensión basada en la imagen oficial de PHP Dockerpor ejemplo, usando este Dockerfile: php:5.6-fpm.

Los documentos dicen que puedo instalar extensiones de esta manera, instalando dependencias para extensiones manualmente:

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"]

Sin Docker lo instalé con apt-get install php5-redis. Pero, ¿cómo puedo instalarlo usando el enfoque anterior?

avatar de usuario
TimWolla

Redis no es una extensión que se incluye en “php-src”, por lo tanto, no puede usar docker-php-ext-install. Usar PECL:

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

En alpine php 7.3.5 podemos usar:

RUN apk add --no-cache pcre-dev $PHPIZE_DEPS \
        && pecl install redis \
        && docker-php-ext-enable redis.so

  • TimWolla, gracias, lo intentaré. Entonces, necesito instalar pecl así antes de todos estos?

    – starikovs

    12 de julio de 2015 a las 19:53


  • TimWolla, pecl no está incluido por defecto.

    – starikovs

    25 de julio de 2015 a las 6:42

  • ¿Qué pasa si quiero usar una imagen diferente para Redis?

    – IlGala

    17 dic 2019 a las 16:35

  • @IlGala Este comando instala extensión php para redis no redis servidor en sí

    – piotrekkr

    20 de diciembre de 2019 a las 10:23

  • ¿Qué hacen las opciones -o y -f?

    – Lars Nyström

    28 de mayo de 2020 a las 12:20

Mi opinión, la forma más fácil es:

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

😉

  • Sí, es una forma moderna de responder.

    – Yarco

    10 de mayo de 2017 a las 6:26

  • Funciona genial!! Gracias.

    – Sivaji

    8 de enero de 2019 a las 11:12

  • No funciona. Específicamente, docker-php-ext-enable redis NO instala ningún archivo de configuración en ninguna parte. Simplemente no hace nada.

    – Szczepan Hołyszewski

    10 abr 2020 a las 20:36

  • Me da error docker-php-ext-enable – no encontrado. ¿Puedes ayudar aquí?

    – Sunil pachlangia

    11 de junio de 2020 a las 9:46

  • Vi el comentario de @SzczepanHołyszewski e hice el primer comando (RUN pecl install redis), no ambos (RUN pecl install redis && docker-php-ext-enable redis). ¡Eso es todo lo que se necesitaba para mí!

    – Tyler Collier

    10 de marzo de 2021 a las 23:58

avatar de usuario
otro tipo

Versión ligeramente revisada de starikovs y respuestas skyred para la versión actual de PHP 7 de la imagen acoplable (probada en php:7.0.8-fpm-alpine y php:7.0.8-alpine).

Utiliza el recién lanzado 3.0 versión (junio de 2016) para 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

  • Probé la respuesta de @starikovs y nunca pude habilitar la extensión de manera efectiva. ¡Esta respuesta funcionó la primera vez!

    – Mateo Setter

    22 de junio de 2018 a las 12:24

avatar de usuario
starikovs

He encontrado dos formas de instalar php-redis extensión para oficial imagen acoplable php-fpm. Aquí están:

La primera forma es compilar redis desde las fuentes e instalar.

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 El script está incluido en la imagen de php-fpm y puede compilar extensiones e instalarlas.

La segunda forma de hacerlo es con PECL.

Como respondió TimWolla, puedes hacerlo con PECLpero en mi caso, PECL no está instalado por defecto.

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

Basado en la respuesta de @starikovs. Agregué una variable para el estilo de la ventana acoplable.

# 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

avatar de usuario
Comunidad

Si desea utilizar redis como controlador de sesión;

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

Si desea usar la extensión redis con PHP 7 en 2015 (tomado de la respuesta de skyred);

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

avatar de usuario
aarón osborn

Esto funciona para imágenes alpinas:

RUN set -xe \
    && apk add --no-cache --update --virtual .phpize-deps $PHPIZE_DEPS \
    && pecl install -o -f redis  \
    && echo "extension=redis.so" > /usr/local/etc/php/conf.d/redis.ini \
    && rm -rf /usr/share/php \
    && rm -rf /tmp/* \
    && apk del  .phpize-deps

Editar: barra invertida faltante agregada

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad