Как установить расширение php-redis с использованием официального подхода к образцу PHP Docker?
Я хочу создать свой образ PHP-FPM с расширением php-redis
на основе официального изображения PHP Docker, например, используя этот файл 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
. Но как я могу установить его, используя вышеприведенный подход?
Ответы
Ответ 1
Я нашел два способа установить расширение php-redis для официального образа Docker php-fpm. Вот они:
Первый способ - скомпилировать 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.
Как ответил TimaWolla 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
Ответ 2
Redis не является расширением, включенным в "php-src", поэтому вы не можете использовать docker-php-ext-install
. Используйте PECL:
RUN pecl install -o -f redis \
&& rm -rf /tmp/pear \
&& docker-php-ext-enable redis
Ответ 3
Мое мнение, самый простой способ:
RUN pecl install redis && docker-php-ext-enable redis
;)
Ответ 4
Немного пересмотренная версия starikovs и неактивные ответы для текущей версии файла докеры PHP 7 (версия 7) проверены на php:7.0.8-fpm-alpine
и php:7.0.8-alpine
).
Использует недавно выпущенную версию 3.0
(июнь 2016 г.) для 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
Ответ 5
На основании ответа @starikovs. Я добавил переменную для стиля докеров.
# 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
Если вы хотите использовать redis extension с PHP 7 в 2015 году (заимствованный из неаккуратного ответа);
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
Я использую сочетание официального расширения док-станции PECL и PHP скрипт
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
Ответ 8
Немного измененная версия starikovs и неактивные ответы для текущей версии образа докера.
Протестировано на 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
Ответ 9
В своем Dockerfile вы можете клонировать репозиторий и установить его с помощью:
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
Ответ 10
Это работает для альпийских изображений:
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
Изменение: добавлен отсутствующий обратный слеш