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

sta*_*ovs 47 php redis docker dockerfile

我想php-redis基于官方的PHP Docker镜像构建我的PHP-FPM图像扩展,例如,使用这个Dockerfile:php:5.6-fpm.

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

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"]
Run Code Online (Sandbox Code Playgroud)

没有Docker,我安装了它apt-get install php5-redis.但是如何使用上述方法安装它?

Tim*_*lla 57

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

RUN pecl install -o -f redis \
&&  rm -rf /tmp/pear \
&&  docker-php-ext-enable redis
Run Code Online (Sandbox Code Playgroud)

  • -o 和 -f 选项有什么作用? (2认同)
  • @LarsNyström -o --onlyreqdeps:安装所有必需的依赖项,-f --force:将覆盖较新安装的软件包 (2认同)

Pav*_*vel 29

我的意见,最简单的方法是:

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

;)

  • 不起作用。具体来说,docker-php-ext-enable redis 不会在任何地方安装任何配置文件。它根本什么也不做。 (3认同)
  • 是的,这是一种现代方式的答案. (2认同)

oth*_*guy 16

稍微修改版本的starikovsskyred答案为当前PHP 7版本的docker镜像(测试php:7.0.8-fpm-alpinephp:7.0.8-alpine).

使用3.0PHP 7 的新发布版本(2016年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
Run Code Online (Sandbox Code Playgroud)


sta*_*ovs 15

我找到了两种方法来安装官方php-fpm Docker镜像的php-redis扩展.他们来了:

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

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
Run Code Online (Sandbox Code Playgroud)

docker-php-ext-install 脚本包含在php-fpm映像中,可以编译扩展并安装它们.

第二种方法是使用PECL.

作为TimWolla 回答,您可以做到这一点PECL,但对我来说,PECL是不是默认安装的.

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

  • 我必须在`mv`之前添加`mkdir -p / usr / src / php / ext`。 (2认同)

sky*_*red 10

基于@starikovs的回答.我为docker风格添加了一个变量.

# 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
Run Code Online (Sandbox Code Playgroud)


mas*_*tic 7

如果要将redis用作会话处理程序;

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

如果你想在2015年使用带有PHP 7的redis扩展(借用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
Run Code Online (Sandbox Code Playgroud)


小智 5

这适用于高山图像:

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
Run Code Online (Sandbox Code Playgroud)

编辑:添加缺少的反斜杠


mih*_*sen 5

试了几种方法。在 alpine php 7.3.5 上,我们可以使用:

RUN apk add --no-cache pcre-dev $PHPIZE_DEPS \
        && pecl install redis \
        && docker-php-ext-enable redis.so
Run Code Online (Sandbox Code Playgroud)