如何使用官方的PHP Docker映像方法安装php-redis扩展?

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

我想基于官方PHP Docker映像构建扩展名为php-redis的PHP-FPM映像,例如,使用以下Dockerfile:php:5.6-fpm。

文档说我可以通过这种方式安装扩展,手动安装扩展的依赖项:

1
2
3
4
5
6
7
8
9
10
11
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"]

在没有Docker的情况下,我使用apt-get install php5-redis安装了它。 但是如何使用上面的方法安装它?


Redis不是" php-src"中包含的扩展,因此您不能使用docker-php-ext-install。使用PECL:

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


我认为,最简单的方法是:

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

;)


当前PHP 7版本的docker映像的starikovs的略微修订版??本和skyred答案(在php:7.0.8-fpm-alpinephp:7.0.8-alpine上测试)。

使用PHP 7的最新发布的3.0版本(2016年6月)。

1
2
3
4
5
6
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


我发现了两种安装官方php-fpm Docker映像的php-redis扩展的方法。他们来了:

第一种方法是从源代码编译redis并进行安装。

1
2
3
4
5
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脚本包含在php-fpm映像中,可以编译扩展并安装它们。

第二种方法是使用PECL。

正如TimWolla回答的那样,您可以使用PECL来完成此操作,但就我而言,默认情况下未安装PECL。

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


基于@starikovs答案。我为docker style添加了一个变量。

1
2
3
4
5
6
7
8
# 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作为会话处理程序;

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

如果您想在2015年将Redis扩展与PHP 7一起使用(摘自skyred的回答);

1
2
3
4
5
6
7
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


我正在使用PECL和PHP官方docker扩展脚本的组合

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

对于PHP7,您需要等待正式的redis pecl发布或使用git:

1
2
3
4
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


这适用于高山图像:

1
2
3
4
5
6
7
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

编辑:添加了缺少的反斜杠


在您的Dockerfile中,您可以克隆存储库并使用以下命令进行安装:

1
2
3
4
5
6
7
RUN git clone https://github.com/phpredis/phpredis.git /tmp/phpredis \
&& cd /tmp/phpredis \
&& git checkout -b 3.1.2 \ ## or the release you need #
&& phpize \
&& ./configure \
&& make \
&& make install

Starikovs的略微修订版??本和docker映像的当前版本的skyred答案。
在php:5-fpm-alpine上测试

1
2
3
4
5
6
7
8
9
10
# 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