2015-07-12 3 views
23

Desidero creare l'immagine PHP-FPM con l'estensione php-redis basata sullo official PHP Docker image, ad esempio, utilizzando questo file Docker: php:5.6-fpm.Come installare l'estensione php-redis usando l'approccio dell'immagine ufficiale di Docker PHP?

I documenti dicono che posso installare estensioni questo modo, l'installazione di dipendenze per estensioni manualmente:

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

Senza Docker ho installato con apt-get install php5-redis. Ma come posso installarlo usando l'approccio sopra?

risposta

10

ho trovato due modi per installare php-redis estensione per ufficiale php-fpm Docker image. Eccoli:

Il primo modo è compilare redis da fonti e installare.

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 script è incluso immagine php-fpm e può compilare le estensioni e installarli.

Il secondo modo per farlo è con PECL.

Come TimWolla answered, è possibile farlo con PECL, ma nel mio caso, PECL non è installato per impostazione predefinita.

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

Redis non è un'estensione inclusa in "php-src", pertanto non è possibile utilizzare docker-php-ext-install. Uso PECL:

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

TimWolla, grazie , Lo proverò. Quindi, devo installare 'pecl' anche prima di tutti questi? – starikovs

+0

@starikovs pecl dovrebbe essere già incluso. – TimWolla

+0

TimWolla, pecl non è incluso di default. – starikovs

10

Sulla base della risposta di @starikovs. Ho aggiunto una variabile per lo stile di finestra mobile.

# 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

Se si desidera utilizzare redis come gestore di sessioni;

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

Se si desidera utilizzare Redis estensione con PHP 7 nel 2015 (preso in prestito da skyred 's risposta);

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

mi hai salvato un paio d'ore, grazie –

2

sto usando combinazione di PECL e PHP script di estensione ufficiale finestra mobile

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

Per PHP7 è necessario attendere per il rilascio ufficiale Redis PECL o utilizzare 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 
+1

Redis PECL extension v3 è disponibile per PHP 7 dal 2016-06-10. –

0

Leggermente versione rivista di starikovs e skyred risposte per la versione corrente dell'immagine di finestra mobile. provata su php: 5-FPM-alpino

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

versione leggermente riveduta del starikovs e skyred risposte per l'attuale versione di PHP 7 dell'immagine finestra mobile (testato su php:7.0.8-fpm-alpine e php:7.0.8-alpine).

Utilizza la versione appena rilasciata 3.0 (giugno 2016) per 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 
+1

Questo ha funzionato come un fascino. Grazie! – bakytn

7

mio parere, il modo più semplice è:

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

;)

+1

Sì, è una risposta moderna. – Yarco

Problemi correlati