nepster-web
@nepster-web

Как установить imagick для PHP7.1 (docker, alpine)?

Изучаю докер, есть задача установить расширение Imagick для php:7.1-fpm-alpine

Пример:
# Imagick
ENV IMAGICK_VERSION 3.4.1
RUN apk add --no-cache imagemagick-dev libtool autoconf gcc g++ make \
    && pecl install imagick-$IMAGICK_VERSION \
    && echo "extension=imagick.so" > /usr/local/etc/php/conf.d/ext-imagick.ini \
    && apk del libtool autoconf gcc g++ make


Проблема заключается в том, что во время установки задается вопрос:
19 source files, building
running: phpize
Configuring for:
PHP Api Version:         20160303
Zend Module Api No:      20160303
Zend Extension Api No:   320160303
Please provide the prefix of Imagemagick installation [autodetect] :


Docker этот момент игнорирует и утилита ставится, а вот модуль для php нет. В ручном режиме я проверил, если нажать enter, все заходит как родное.

Подскажите пожалуйста, как в таком случае быть ?
  • Вопрос задан
  • 4970 просмотров
Решения вопроса 2
Tyranron
@Tyranron
В таких случаях через sub-shell можно скормить команде то, чего просит.
Например:
# Install Xdebug
RUN apk add --update --no-cache --virtual .tools-deps \
            autoconf g++ libtool make \
 && (yes | pecl install xdebug) \
 && apk del .tools-deps \
 && rm -rf /var/cache/apk/*
Ответ написан
Забыть про pecl и качать с Гитхаба.
Пример сборки imagick-ext
apk add --no-cache --virtual .imagick-build-dependencies \
  autoconf \
  curl \
  g++ \
  gcc \
  git \
  imagemagick-dev \
  libtool \
  make \
  tar \
&& apk add --virtual .imagick-runtime-dependencies \
  imagemagick \

# (!) Ниже нужно оставить один способ для скачивания, убрав другой, включая его зависимости.

# Git
&& IMAGICK_TAG="3.4.2" \
&& git clone -o ${IMAGICK_TAG} --depth 1 https://github.com/mkoppanen/imagick.git /tmp/imagick \
&& cd /tmp/imagick \

# curl (wget)
&& IMAGICK_VERSION="3.4.2" \
&& IMAGICK_FILENAME="imagick-${IMAGICK_VERSION}" \
&& IMAGICK_SOURCE="https://github.com/mkoppanen/imagick/archive/${IMAGICK_VERSION}.tar.gz" \
&& curl -fSL --connect-timeout 30 ${IMAGICK_SOURCE} | tar xz -C /tmp \
&& cd /tmp/${IMAGICK_FILENAME} \

&& phpize \
&& ./configure \
&& make \
&& make install \

&& echo "extension=imagick.so" > /usr/local/etc/php/conf.d/ext-imagick.ini \

&& apk del .imagick-build-dependencies

В вашем случае задавать версию внешним образом лучше через ARG.
Пример установки версии imagick-ext через аргумент
Dockerfile
ARG IMAGICK_VERSION="3.4.2"
docker
docker build --build-arg IMAGICK_VERSION=3.4.2 .
docker-compose
build:
  context: ./alpine-php
  args:
    - IMAGICK_VERSION=3.4.2


Пример полной сборки PHP на Alpine :)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы