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?
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
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
Meine Meinung ist der einfachste Weg:
RUN pecl install redis && docker-php-ext-enable redis
;)
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
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
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
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
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
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
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