web-dev-qa-db-ja.com

DockerのPHP7 Alpineイメージにphp memcached拡張機能をインストールするにはどうすればよいですか?

公式のphp7 Dockerイメージには次の例があります。

FROM php:7.0-fpm
RUN apt-get update && apt-get install -y libmemcached-dev \
    && pecl install memcached \
    && docker-php-ext-enable memcached

FROM php:7.0-fpm-Alpineを使用しようとしています:

RUN apk add --update --no-cache libmemcached-dev
RUN      pecl install memcached && docker-php-ext-enable memcached

PECLはこのエラーを出します:

pecl/memcachedにはPHP(バージョン> = 5.2.0、バージョン<= 6.0.0、除外バージョン:6.0.0))が必要です。インストールされているバージョンは7.0.13です

高山にmemcached php拡張機能をインストールするにはどうすればよいですか?

10
timetofly

現在 php-memcached-dev:php7 ブランチには、この拡張機能のソースが含まれています。

それをインストールするには、docker-php-ext-*コマンドですが、ソースを自分でチェックアウトする必要があります。

基本インストール

拡張機能をインストールするために必要なすべてがすでにインストールされていると仮定すると、次のことができます。

RUN git clone -b php7 https://github.com/php-memcached-dev/php-memcached /usr/src/php/ext/memcached \
    && docker-php-ext-configure /usr/src/php/ext/memcached \
        --disable-memcached-sasl \
    && docker-php-ext-install /usr/src/php/ext/memcached \
    && rm -rf /usr/src/php/ext/memcached

このブロックは、リポジトリのクローンを作成し、拡張機能を構成してインストールしてから、自己拡張後にクリーンアップします。

前提条件

ほとんどの場合、拡張機能をビルドするためにパッケージにインストールする必要があります。次のようにして、パッケージを追加および削除できます。

ENV MEMCACHED_DEPS zlib-dev libmemcached-dev cyrus-sasl-dev git
RUN set -xe \
    && apk add --no-cache libmemcached-libs zlib \
    && apk add --no-cache \
        --virtual .memcached-deps \
        $MEMCACHED_DEPS \
    && git clone -b php7 https://github.com/php-memcached-dev/php-memcached /usr/src/php/ext/memcached \
    && docker-php-ext-configure /usr/src/php/ext/memcached \
        --disable-memcached-sasl \
    && docker-php-ext-install /usr/src/php/ext/memcached \
    && rm -rf /usr/src/php/ext/memcached \
    && apk del .memcached-deps

2017年5月17日更新

memcachedがphp7の公式peclライブラリに追加されました(v3-> php7/7.1、v2-> php5)

これにより、インストールが少し異なります

FROM php:7.0-Alpine

ENV MEMCACHED_DEPS zlib-dev libmemcached-dev cyrus-sasl-dev
RUN apk add --no-cache --update libmemcached-libs zlib
RUN set -xe \
    && apk add --no-cache --update --virtual .phpize-deps $PHPIZE_DEPS \
    && apk add --no-cache --update --virtual .memcached-deps $MEMCACHED_DEPS \
    && pecl install memcached \
    && echo "extension=memcached.so" > /usr/local/etc/php/conf.d/20_memcached.ini \
    && rm -rf /usr/share/php7 \
    && rm -rf /tmp/* \
    && apk del .memcached-deps .phpize-deps
24
Harry Bragg

それを試してみてください。

FROM php:7.2.10-fpm-Alpine3.7


# Install PHP Extensions (igbinary & memcached)
RUN apk add --no-cache --update libmemcached-libs zlib
RUN set -xe && \
    cd /tmp/ && \
    apk add --no-cache --update --virtual .phpize-deps $PHPIZE_DEPS && \
    apk add --no-cache --update --virtual .memcached-deps zlib-dev libmemcached-dev cyrus-sasl-dev && \
# Install igbinary (memcached's deps)
    pecl install igbinary && \
# Install memcached
    ( \
        pecl install --nobuild memcached && \
        cd "$(pecl config-get temp_dir)/memcached" && \
        phpize && \
        ./configure --enable-memcached-igbinary && \
        make -j$(nproc) && \
        make install && \
        cd /tmp/ \
    ) && \
# Enable PHP extensions
    docker-php-ext-enable igbinary memcached && \
    rm -rf /tmp/* && \
    apk del .memcached-deps .phpize-deps
5
SND-KNN