Использование MozJPEG в docker-контейнере
Feb 15, 2018 08:55 · 233 words · 2 minute read
Ранее мы уже упоминали о важности оптимизации и сжатия изображений перед размещением на сайте и рассматривали несколько утилит для работы с картинками.
Давайте разберемся с использованием MozJPEG в docker-контейнере!
Считаем, что docker уже установлен и корректно работает.
Прежде всего, получаем исходники утилиты MozJPEG:
git clone git://github.com/mozilla/mozjpeg.git
В этом же каталоге создадим файл Dockerfile (инструкции для сборки docker-образа) следующего содержания:
FROM alpine:3.4
COPY . /source
RUN apk —update add autoconf automake build-base libtool nasm
RUN cd /source && autoreconf -fiv && ./configure —prefix=/opt/mozjpeg && make install
Собираем docker-образ следующей командой:
docker build -t mozjpeg .
Примечание. Исходники утилиты MozJPEG можно стягивать непосредственно при сборке docker-образа, но в таком случае необходимо установить git
.
После успешной сборки образа можем запустить обработку изображений в docker-контейнере с помощью команды:
docker run \
--rm \
-v path-to-image-dir:/img mozjpeg \
sh -c "/opt/mozjpeg/bin/cjpeg -optimize -quality 80 /img/photo.jpg > /img/photo_small.jpg"
Параметр --rm
удалит docker-контейнер после завершения обработки изображения, а с помощью ключа -v
монтируем каталог path-to-image-dir
с хост-машины в каталог /img
в docker-контейнере.
Для обработки всех изображений в каталоге удобнее создать скрипт (как мы уже делали в предыдущем примере) optimize.sh
:
#!/usr/bin/env sh
tmpfile=$(mktemp)
/opt/mozjpeg/bin/cjpeg -optimize -progressive -quality 80 -outfile ${tmpfile} ${1}
mv ${tmpfile} ${1}
Пересобираем docker-образ (чтобы скрипт оказался внутри контейнера), и тогда команда запуска docker-контейнера будет выглядеть примерно так:
docker run \
--rm \
-v path-to-image-dir:/img mozjpeg \
sh -c "find . -iname *.jpg | xargs -I % /optimize.sh %"