簡體   English   中英

在 docker 容器中安裝 imagemagick

[英]Installing imagemagick in docker container

我正在嘗試在我的 Ubuntu 14.04 服務器上使用 ImageMagick 在上傳到 s3 之前調整圖像大小。 我正在 Wercker 創建的 docker 容器中運行所有內容。 問題是我已經將它安裝在服務器上,並將其安裝在 docker 容器的 Wercker 構建中,但我的 EasyImage(處理調整大小的 nodejs 庫)卻說

 ImageMagick Not Found
 EasyImage requires ImageMagick to work. Install it from http://www.imagemagick.org/script/binary-release.php.

這是我的 Wercker 文件中用於安裝 imagemagick 的命令

sudo apt-get update -y && sudo apt-get install -y imagemagick php5-imagick

我也用過

sudo apt-get update -y && sudo apt-get install -y imagemagick

,但似乎都不起作用。 我是否缺少讓 ImageMagick 在 docker 容器內工作的東西?

您需要使用 pecl 和擴展安裝 imagick 才能在 php 中啟用 imagick。 以下命令對我有用:

RUN apt-get update && apt-get install -y \
    imagemagick libmagickwand-dev --no-install-recommends \
    && pecl install imagick \
    && docker-php-ext-enable imagick

我在 docker 容器中也遇到了 imagemagick 的問題。 我分享了我的 docker 配置的一部分。 當我測試 docker 容器出了什么問題時,我看到 imagemagick 中關於丟失字體的錯誤。 如果您使用 smth 映像的輕量級版本,例如 linux-alpine 或 smth else,則您的映像不能具有任何重要的工具,例如本地機器或 VM。 當然,您需要將其安裝在 docker 容器中,而不是安裝在服務器上的 vm 中

在 docker 中安裝 imagemagic 非常簡單: apk --update add imagemagick

我的 docker 文件的一部分。 我安裝了一些重要的字體,imagemagic 很好用。 然而它可以解決另一個問題,因為我在 docker 中嘗試使用 imagemagick 時遇到了這個錯誤

流產生空緩沖區

# the first thing we specify in a Dockerfile is the base image
FROM keymetrics/pm2:latest-alpine

RUN yarn global add pm2@latest

# Install image preview generator tools
RUN apk add --no-cache file
RUN apk --update add imagemagick

# Install fonts
RUN apk --no-cache add msttcorefonts-installer fontconfig && \
 update-ms-fonts && \
 fc-cache -f

我使用這些說明來安裝給定版本的 ImageMagick,包括所有依賴項。 處理時間:60 秒。

如果您的基礎映像支持 rpm package 管理器,您可以省略“alien”部分。

FROM debian:bullseye-slim
ARG DEBIAN_FRONTEND=noninteractive
RUN IMV='7.1.0-37' && \
    BUILD_TOOLS='alien' && \
    apt-get update && \
    apt-get install -y ${BUILD_TOOLS}  && \
    mkdir -p /tmp/imagemagick && \
    cd /tmp/imagemagick && \
    curl -o ImageMagick-${IMV}.x86_64.rpm -L "https://download.imagemagick.org/ImageMagick/download/linux/CentOS/x86_64/ImageMagick-${IMV}.x86_64.rpm" && \
    alien -ik ImageMagick-${IMV}.x86_64.rpm && \
    curl -o ImageMagick-libs-${IMV}.x86_64.rpm -L "https://download.imagemagick.org/ImageMagick/download/linux/CentOS/x86_64/ImageMagick-libs-${IMV}.x86_64.rpm" && \
    alien -ik ImageMagick-libs-${IMV}.x86_64.rpm && \
    apt-get purge -y ${BUILD_TOOLS} && \
    cd / && rm -rf /tmp/imagemagick && \
    apt-get -y purge man && \
    apt-get -y purge && \
    apt-get -y clean autoclean && \
    apt-get -y autoremove && \
    rm -rf /var/lib/apt/{apt,dpkg,cache,log,lists}/*

對我來說,這段代碼有效:

RUN set -ex \
    && apk add --no-cache --virtual .phpize-deps $PHPIZE_DEPS imagemagick-dev libtool \
    && export CFLAGS="$PHP_CFLAGS" CPPFLAGS="$PHP_CPPFLAGS" LDFLAGS="$PHP_LDFLAGS" \
    && pecl install imagick-3.4.3 \
    && docker-php-ext-enable imagick \
    && apk add --no-cache --virtual .imagick-runtime-deps imagemagick \
    && apk del .phpize-deps

它通過 pecl pecl install imagick 槽,然后啟用 php ext。

我在這里找到了解決方案。

我會使用 Image Magick Easy Install (IMEI) 在父 docker 圖像中安裝imagemagick 這是我的Dockerfile ,它就是這樣做的。

使用父圖像的目的是減少 docker 構建時間,因為IMEI需要一段時間才能運行。 IMEI非常專業,將確保imagemagick是最新的並且安裝了所有必要的依賴項(例如用於處理 HEIF 文件等)

我的父映像也安裝ffmpeg ,但您可以創建自己的父映像並根據您的需要進行定制。

然后使用以下方法創建您的孩子 Dockerfile:

FROM parent-image

例子:

FROM danday74/ubuntu18-ffmpeg4-imagemagick7

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM