【问题标题】:How to install php-redis extension using the official PHP Docker image approach?如何使用官方 PHP Docker 镜像方法安装 php-redis 扩展?
【发布时间】:2015-09-30 22:05:30
【问题描述】:

我想基于official PHP Docker image 构建我的带有php-redis 扩展的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"]

没有 Docker 我用apt-get install php5-redis 安装它。但是如何使用上面的方法安装呢?

【问题讨论】:

    标签: php redis docker dockerfile


    【解决方案1】:

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

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

    在 alpine php 7.3.5 上我们可以使用:

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

    【讨论】:

    • TimWolla,谢谢,我会试试的。那么,我需要在所有这些之前安装pecl 吗?
    • TimWolla, pecl 默认不包括在内。
    • 如果我想为 Redis 使用不同的图像怎么办?
    • @IlGala 这个命令安装 php 扩展为 redis 而不是 redis 服务器本身
    • -o 和 -f 选项有什么作用?
    【解决方案2】:

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

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

    ;)

    【讨论】:

    • 是的,这是一个现代的答案。
    • 效果很好!!谢谢。
    • 不起作用。特别是 docker-php-ext-enable redis 不会在任何地方安装任何配置文件。它什么都不做。
    • 给我错误 docker-php-ext-enable -- 未找到。你能帮忙吗?
    • 我看到了@SzczepanHołyszewski 的评论,只是执行了第一个命令 (RUN pecl install redis),而不是两个 (RUN pecl install redis && docker-php-ext-enable redis)。这就是我所需要的一切!
    【解决方案3】:

    针对当前 PHP 7 版本的 docker 映像(在 php:7.0.8-fpm-alpinephp:7.0.8-alpine 上测试)略微修改了 starikovsskyred 答案。

    为 PHP 7 使用新发布的 3.0 版本(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
    

    【讨论】:

    • 我尝试了@starikovs 的答案,但我始终无法有效地启用扩展。这个答案第一次奏效!
    【解决方案4】:

    我找到了两种方法来为官方php-fpm Docker image 安装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
    

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

    第二种方法是使用 PECL。

    作为 TimWolla answered,您可以使用 PECL 进行操作,但在我的情况下,默认情况下不安装 PECL。

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

    【讨论】:

    • 我必须在mv 之前添加一个mkdir -p /usr/src/php/ext
    • 我使用了 pecl 但必须添加 RUN apk add --no-cache autoconf git g++ make 从这个答案:stackoverflow.com/a/44191638/4018940
    【解决方案5】:

    基于@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
    

    【讨论】:

      【解决方案6】:

      如果你想使用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
      

      如果你想在 2015 年将 redis 扩展与 PHP 7 一起使用(借用 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
      

      【讨论】:

        【解决方案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
        

        编辑:添加缺少的反斜杠

        【讨论】:

          【解决方案8】:

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

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

          【讨论】:

          【解决方案9】:

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

          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:

          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
          

          【讨论】:

          • Redis PECL 扩展 v3 自 2016 年 6 月 10 日起可用于 PHP 7。
          【解决方案10】:

          starikovsskyred 对当前版本的 docker 映像的答案略有修改。 在 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
          

          【讨论】:

            【解决方案11】:

            在您的 Dockerfile 中,您可以克隆 repo 并安装它:

            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
            

            【讨论】:

              【解决方案12】:

              对于图像 php:7.2-fpm-alpine.

              RUN apk add autoconf gcc g++ make && pecl install redis && docker-php-ext-enable redis
              

              你可能需要更新之前

              apk --update upgrade
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2018-03-31
                • 2016-11-30
                • 2021-03-23
                • 2023-01-14
                • 1970-01-01
                • 2017-08-31
                相关资源
                最近更新 更多