在添加 redis 扩展到 PHP 官方 Docker 容器中的备注

我想搭建一个PHP应用服务器的集群,并通过Redis共享会话,但由于遇到了一些问题,所以这是我的备忘录。

在Docker容器中实现的目标是这个图的内容。当然,我们还需要考虑将Redis进行集群化,但问题是如何在Docker容器中设置PHP和Redis的连接?如何自动化地创建相同的软件配置,以便多次使用?

スクリーンショット 2017-09-18 9.20.32.png

问题

当尝试向Docker Store的PHP官方仓库中的容器映像添加redis扩展时,按以下方式编写将会失败。

RUN docker-php-ext-install redis

当阅读错误消息时,可以了解到添加目标中没有包含Redis。

Step 4/6 : RUN docker-php-ext-install mcrypt pdo_mysql redis
 ---> Running in 6a2e232a0958
error: /usr/src/php/ext/redis does not exist

usage: /usr/local/bin/docker-php-ext-install [-jN] ext-name [ext-name ...]
   ie: /usr/local/bin/docker-php-ext-install gd mysqli
       /usr/local/bin/docker-php-ext-install pdo pdo_mysql
       /usr/local/bin/docker-php-ext-install -j5 gd mbstring mysqli pdo pdo_mysql shmop

if custom ./configure arguments are necessary, see docker-php-ext-configure

Possible values for ext-name:
bcmath bz2 calendar ctype curl dba dom enchant exif fileinfo filter ftp gd gettext gmp hash iconv imap interbase intl json ldap mbstring mcrypt mysqli oci8 odbc opcache pcntl pdo pdo_dblib pdo_firebird pdo_mysql pdo_oci pdo_odbc pdo_pgsql pdo_sqlite pgsql phar posix pspell readline recode reflection session shmop simplexml snmp soap sockets spl standard sysvmsg sysvsem sysvshm tidy tokenizer wddx xml xmlreader xmlrpc xmlwriter xsl zip
ERROR: Service 'app' failed to build: The command '/bin/sh -c docker-php-ext-install mcrypt pdo_mysql redis' returned a non-zero code: 1

于是我向Google老师提问,发现了Stackoverflow上一篇完美的文章:“如何使用官方的PHP Docker镜像来安装php-redis扩展?” 然而,有很多种不同的方法。

解决方案

尝试了几种方法后,最简单并且易于理解的方法是使用以下的Dockerfile。虽然里面有些多余的内容(笑)。先克隆php redis extension,然后在docker-php-ext-install中进行修改,接下来进行编译、安装,最后会生成配置文件。仅需这些步骤就可以完成,真是非常方便。

FROM php:7-fpm

RUN apt-get update \
    && apt-get install -y libmcrypt-dev mysql-client \
    && apt-get install -y zip unzip git \
    && apt-get install -y vim

RUN git clone -b php7 https://github.com/phpredis/phpredis.git /usr/src/php/ext/redis 

RUN docker-php-ext-install mcrypt pdo_mysql session json mbstring redis

RUN curl -sS https://getcomposer.org/installer | php \
    && mv composer.phar /usr/local/bin/composer

WORKDIR /var/www

印象

构建Docker容器需要与服务器搭建不同的技能,这是肯定的。

广告
将在 10 秒后关闭
bannerAds