Как установить расширение 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. Но как я могу установить его, используя описанный выше подход?
8 ответов:
Redis не является расширением, включенным в "php-src", поэтому вы не можете использовать
docker-php-ext-install. Используйте PECL:RUN pecl install -o -f redis \ && rm -rf /tmp/pear \ && docker-php-ext-enable redis
Слегка переработанная версияstarikovs иskyred ответов для текущей версии PHP 7 образа docker (проверено на
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
Я нашел два способа установить PHP-redis Расширение для официального php-fpm Docker image . Вот они:
Первый способ-это компиляция 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 ответил, Вы можете сделать это с помощью PECL , но в моем случае PECL не установлен по умолчанию.
RUN pecl install -o -f redis \ && rm -rf /tmp/pear \ && echo "extension=redis.so" > /usr/local/etc/php/conf.d/redis.ini
На основе ответа @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
Если вы хотите использовать 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 с PHP 7 в 2015 году (заимствовано из ответа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
Я использую комбинацию 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
Слегка переработанная версияСтариковых иskyred ответов для текущей версии образа 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
Comments