如何使用官方PHP Docker镜像方法安装php-redis扩展?

我想用基于官方PHP Docker镜像的 php-redis扩展来构build我的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安装它。 但是我怎样才能使用上面的方法来安装它?

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

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

我已经find了两种方法来安装php-fpm Docker镜像的 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 回答的那样 ,你可以用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风格添加了一个variables。

 # 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 

当前PHP 7版本的php:7.0.8-fpm-alpine镜像(在php:7.0.8-fpm-alpinephp:7.0.8-alpine上testing过)稍微修改了starikovs和skyred的答案。

使用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 

如果你想使用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年使用PHP 7的redis扩展(借助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 

我的看法,最简单的方法是:

RUN pecl install redis && docker-php-ext-enable 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 

对当前版本的docker图像的starikovs和飙升的答案略作修改。 在php上testing: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