webentwicklung-frage-antwort-db.com.de

Wie installiert man die php-redis-Erweiterung mit dem offiziellen PHP Docker-Image-Ansatz

Ich möchte mein PHP-FPM-Image mit der Erweiterung php-redis basierend auf dem Docker-Image official PHP erstellen, beispielsweise mit dieser Dockerfile: php: 5.6-fpm .

Die Dokumente sagen, dass ich Erweiterungen auf diese Weise installieren kann, indem Abhängigkeiten für Erweiterungen manuell installiert werden: 

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

Ohne Docker habe ich es mit apt-get install php5-redis installiert. Aber wie kann ich es mit dem obigen Ansatz installieren?

37
starikovs

Ich habe zwei Möglichkeiten gefunden, um das php-redis extension für das offizielle php-fpm Docker Image zu installieren. Hier sind sie:

Der erste Weg ist, Redis aus Quellen zu kompilieren und zu installieren.

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-Skript ist in php-fpm image enthalten und kann Erweiterungen kompilieren und installieren.

Der zweite Weg ist der mit PECL.

Als TimWolla antwortete ist dies mit PECL möglich, aber in meinem Fall wird PECL nicht standardmäßig installiert.

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

Redis ist keine Erweiterung, die in "php-src" enthalten ist. Daher können Sie docker-php-ext-install nicht verwenden. Verwenden Sie PECL :

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

Meine Meinung ist der einfachste Weg:

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

;)

20
Pavel

Leicht überarbeitete Version von starikovs und skyred antwortet auf die aktuelle PHP 7-Version des Docker-Images (getestet mit php:7.0.8-fpm-Alpine und php:7.0.8-Alpine).

Verwendet die neu veröffentlichte 3.0-Version (Juni 2016) für 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
13
otherguy

Basierend auf der Antwort von @starikovs. Ich habe eine Variable für den Docker-Stil hinzugefügt.

# 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
10
skyred

Wenn Sie redis als Session-Handler verwenden möchten;

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

Wenn Sie die redis-Erweiterung 2015 mit PHP 7 verwenden möchten (entlehnt von 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
6
masakielastic

Ich verwende eine Kombination aus PECL und dem offiziellen Docker-Erweiterungsskript von PHP

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

Für PHP7 müssen Sie auf die offizielle Veröffentlichung von redis pecl warten oder git verwenden:

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
2
isp_developer

Leicht überarbeitete Version von starikovs und skyred answers für die aktuelle Version des Docker-Images ..__ Geprüft auf 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
0
selim13

Dies funktioniert für Alpenbilder:

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

Bearbeiten: Fehlender Backslash hinzugefügt

0
grogowar

In Ihrem Dockerfile können Sie das Repo klonen und installieren mit:

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
0
azuax