Verified Commit 010b9344 authored by Sebastian Schüpbach's avatar Sebastian Schüpbach
Browse files

generate Dockerfile in CI process

parent 3f974506
Pipeline #33651 failed with stages
in 2 minutes and 36 seconds
target/
Dockerfile
...@@ -15,200 +15,315 @@ include: ...@@ -15,200 +15,315 @@ include:
name: gcr.io/kaniko-project/executor:debug name: gcr.io/kaniko-project/executor:debug
entrypoint: [""] entrypoint: [""]
script: script:
- ./generate-dockerfile $BUILD_WITH
- mkdir -p /kaniko/.docker - mkdir -p /kaniko/.docker
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/$DOCKERFILE --destination $IMAGE_TAG --build-arg BUILD_WITH="$BUILD_WITH" - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/$DOCKERFILE --destination $IMAGE_TAG
retry: retry:
max: 2 max: 2
when: when:
- script_failure - script_failure
build-latest: build-latest-all-kakadu:
extends: .build-image extends: .build-image
variables: variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:latest" IMAGE_TAG: "$CI_REGISTRY_IMAGE:latest-all-kakadu"
DOCKERFILE: "Dockerfile" DOCKERFILE: "Dockerfile"
BUILD_WITH: "kakadu graphicsmagick ffmpeg" BUILD_WITH: "--kakadu --turbojpeg --ffmpeg"
only: only:
- master - master
build-latest-vanilla: build-latest-all-openjpeg:
extends: .build-image extends: .build-image
variables: variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:latest-vanilla" IMAGE_TAG: "$CI_REGISTRY_IMAGE:latest-all-openjpeg"
DOCKERFILE: "Dockerfile" DOCKERFILE: "Dockerfile"
BUILD_WITH: "" BUILD_WITH: "--openjpeg --turbojpeg --ffmpeg"
only: only:
- master - master
build-latest-jp2: build-latest-all-grok:
extends: .build-image extends: .build-image
variables: variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:latest-jp2" IMAGE_TAG: "$CI_REGISTRY_IMAGE:latest-all-grok"
DOCKERFILE: "Dockerfile" DOCKERFILE: "Dockerfile"
BUILD_WITH: "kakadu" BUILD_WITH: "--grok --turbojpeg --ffmpeg"
only: only:
- master - master
build-latest-jp2-free: build-latest-kakadu-ffmpeg:
extends: .build-image extends: .build-image
variables: variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:latest-jp2-free" IMAGE_TAG: "$CI_REGISTRY_IMAGE:latest-kakadu-ffmpeg"
DOCKERFILE: "Dockerfile" DOCKERFILE: "Dockerfile"
BUILD_WITH: "openjpeg" BUILD_WITH: "--kakadu --ffmpeg"
only: only:
- master - master
build-latest-video: build-latest-kakadu-turbojpeg:
extends: .build-image extends: .build-image
variables: variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:latest-video" IMAGE_TAG: "$CI_REGISTRY_IMAGE:latest-kakadu-turbojpeg"
DOCKERFILE: "Dockerfile" DOCKERFILE: "Dockerfile"
BUILD_WITH: "ffmpeg" BUILD_WITH: "--kakadu --turbojpeg"
only: only:
- master - master
build-latest-images: build-latest-kakadu:
extends: .build-image extends: .build-image
variables: variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:latest-images" IMAGE_TAG: "$CI_REGISTRY_IMAGE:latest-kakadu"
DOCKERFILE: "Dockerfile" DOCKERFILE: "Dockerfile"
BUILD_WITH: "graphicsmagick" BUILD_WITH: "--kakadu"
only: only:
- master - master
build-latest-images-jp2: build-latest-openjpeg-ffmpeg:
extends: .build-image extends: .build-image
variables: variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:latest-images-jp2" IMAGE_TAG: "$CI_REGISTRY_IMAGE:latest-openjpeg-ffmpeg"
DOCKERFILE: "Dockerfile" DOCKERFILE: "Dockerfile"
BUILD_WITH: "graphicsmagick kakadu" BUILD_WITH: "--openjpeg --ffmpeg"
only: only:
- master - master
build-latest-images-jp2-free: build-latest-openjpeg-turbojpeg:
extends: .build-image extends: .build-image
variables: variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:latest-images-jp2-free" IMAGE_TAG: "$CI_REGISTRY_IMAGE:latest-openjpeg-turbojpeg"
DOCKERFILE: "Dockerfile" DOCKERFILE: "Dockerfile"
BUILD_WITH: "graphicsmagick openjpeg" BUILD_WITH: "--openjpeg --turbojpeg"
only: only:
- master - master
build-latest-all: build-latest-openjpeg:
extends: .build-image extends: .build-image
variables: variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:latest-all" IMAGE_TAG: "$CI_REGISTRY_IMAGE:latest-openjpeg"
DOCKERFILE: "Dockerfile" DOCKERFILE: "Dockerfile"
BUILD_WITH: "kakadu graphicsmagick ffmpeg" BUILD_WITH: "--openjpeg"
only: only:
- master - master
build-latest-all-free: build-latest-grok-ffmpeg:
extends: .build-image extends: .build-image
variables: variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:latest-all-free" IMAGE_TAG: "$CI_REGISTRY_IMAGE:latest-grok-ffmpeg"
DOCKERFILE: "Dockerfile" DOCKERFILE: "Dockerfile"
BUILD_WITH: "openjpeg graphicsmagick ffmpeg" BUILD_WITH: "--grok --ffmpeg"
only: only:
- master - master
build-version: build-latest-grok-turbojpeg:
extends: .build-image extends: .build-image
variables: variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME" IMAGE_TAG: "$CI_REGISTRY_IMAGE:latest-grok-turbojpeg"
DOCKERFILE: "Dockerfile" DOCKERFILE: "Dockerfile"
BUILD_WITH: "kakadu graphicsmagick ffmpeg" BUILD_WITH: "--grok --turbojpeg"
only:
- master
build-latest-grok:
extends: .build-image
variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:latest-grok"
DOCKERFILE: "Dockerfile"
BUILD_WITH: "--grok"
only:
- master
build-latest-turbojpeg-ffmpeg:
extends: .build-image
variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:latest-turbojpeg-ffmpeg"
DOCKERFILE: "Dockerfile"
BUILD_WITH: "--turbojpeg --ffmpeg"
only:
- master
build-latest-turbojpeg:
extends: .build-image
variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:latest-turbojpeg"
DOCKERFILE: "Dockerfile"
BUILD_WITH: "--turbojpeg"
only:
- master
build-latest-ffmpeg:
extends: .build-image
variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:latest-ffmpeg"
DOCKERFILE: "Dockerfile"
BUILD_WITH: "--ffmpeg"
only:
- master
build-latest-no-deps:
extends: .build-image
variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:latest-no-deps"
DOCKERFILE: "Dockerfile"
BUILD_WITH: ""
only:
- master
build-version-all-kakadu:
extends: .build-image
variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME-all-kakadu"
DOCKERFILE: "Dockerfile"
BUILD_WITH: "--kakadu --turbojpeg --ffmpeg"
except: except:
- master - master
- tags - tags
build-version-vanilla: build-version-all-openjpeg:
extends: .build-image extends: .build-image
variables: variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME-vanilla" IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME-all-openjpeg"
DOCKERFILE: "Dockerfile" DOCKERFILE: "Dockerfile"
BUILD_WITH: "" BUILD_WITH: "--openjpeg --turbojpeg --ffmpeg"
except:
- master
- tags
build-version-all-grok:
extends: .build-image
variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME-all-grok"
DOCKERFILE: "Dockerfile"
BUILD_WITH: "--grok --turbojpeg --ffmpeg"
except: except:
- master - master
- tags - tags
build-version-jp2: build-version-kakadu-ffmpeg:
extends: .build-image extends: .build-image
variables: variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME-jp2" IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME-kakadu-ffmpeg"
DOCKERFILE: "Dockerfile" DOCKERFILE: "Dockerfile"
BUILD_WITH: "kakadu" BUILD_WITH: "--kakadu --ffmpeg"
except: except:
- master - master
- tags - tags
build-version-jp2-free: build-version-kakadu-turbojpeg:
extends: .build-image extends: .build-image
variables: variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME-jp2-free" IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME-kakadu-turbojpeg"
DOCKERFILE: "Dockerfile" DOCKERFILE: "Dockerfile"
BUILD_WITH: "openjpeg" BUILD_WITH: "--kakadu --turbojpeg"
except: except:
- master - master
- tags - tags
build-version-video: build-version-kakadu:
extends: .build-image extends: .build-image
variables: variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME-video" IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME-kakadu"
DOCKERFILE: "Dockerfile" DOCKERFILE: "Dockerfile"
BUILD_WITH: "ffmpeg" BUILD_WITH: "--kakadu"
except: except:
- master - master
- tags - tags
build-version-images: build-version-openjpeg-ffmpeg:
extends: .build-image extends: .build-image
variables: variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME-images" IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME-openjpeg-ffmpeg"
DOCKERFILE: "Dockerfile" DOCKERFILE: "Dockerfile"
BUILD_WITH: "graphicsmagick" BUILD_WITH: "--openjpeg --ffmpeg"
except: except:
- master - master
- tags - tags
build-version-images-jp2: build-version-openjpeg-turbojpeg:
extends: .build-image extends: .build-image
variables: variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME-images-jp2" IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME-openjpeg-turbojpeg"
DOCKERFILE: "Dockerfile" DOCKERFILE: "Dockerfile"
BUILD_WITH: "graphicsmagick kakadu" BUILD_WITH: "--openjpeg --turbojpeg"
except: except:
- master - master
- tags - tags
build-version-images-jp2-free: build-version-openjpeg:
extends: .build-image extends: .build-image
variables: variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME-images-jp2-free" IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME-openjpeg"
DOCKERFILE: "Dockerfile" DOCKERFILE: "Dockerfile"
BUILD_WITH: "graphicsmagick openjpeg" BUILD_WITH: "--openjpeg"
except: except:
- master - master
- tags - tags
build-version-all: build-version-grok-ffmpeg:
extends: .build-image extends: .build-image
variables: variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME-all" IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME-grok-ffmpeg"
DOCKERFILE: "Dockerfile" DOCKERFILE: "Dockerfile"
BUILD_WITH: "kakadu graphicsmagick ffmpeg" BUILD_WITH: "--grok --ffmpeg"
except: except:
- master - master
- tags - tags
build-version-all-free: build-version-grok-turbojpeg:
extends: .build-image extends: .build-image
variables: variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME-all-free" IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME-grok-turbojpeg"
DOCKERFILE: "Dockerfile" DOCKERFILE: "Dockerfile"
BUILD_WITH: "openjpeg graphicsmagick ffmpeg" BUILD_WITH: "--grok --turbojpeg"
except:
- master
- tags
build-version-grok:
extends: .build-image
variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME-grok"
DOCKERFILE: "Dockerfile"
BUILD_WITH: "--grok"
except:
- master
- tags
build-version-turbojpeg-ffmpeg:
extends: .build-image
variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME-turbojpeg-ffmpeg"
DOCKERFILE: "Dockerfile"
BUILD_WITH: "--turbojpeg --ffmpeg"
except:
- master
- tags
build-version-turbojpeg:
extends: .build-image
variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME-turbojpeg"
DOCKERFILE: "Dockerfile"
BUILD_WITH: "--turbojpeg"
except:
- master
- tags
build-version-ffmpeg:
extends: .build-image
variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME-ffmpeg"
DOCKERFILE: "Dockerfile"
BUILD_WITH: "--ffmpeg"
except:
- master
- tags
build-version-no-deps:
extends: .build-image
variables:
IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME-no-deps"
DOCKERFILE: "Dockerfile"
BUILD_WITH: ""
except: except:
- master - master
- tags - tags
FROM debian:buster-slim AS build
# Change the VERSION envvar according to the cantaloupe version. Don't forget to change the argument in the ENTRYPOINT command below as well
ARG VERSION=5.0.4 ARG VERSION=5.0.4
ARG BUILD_WITH=""
FROM debian:buster-slim AS build
WORKDIR / WORKDIR /
RUN apt-get -qq update && \ RUN apt-get -qq update && \
apt-get -qq install wget unzip && \ apt-get -qq install wget unzip && \
...@@ -9,32 +8,68 @@ RUN apt-get -qq update && \ ...@@ -9,32 +8,68 @@ RUN apt-get -qq update && \
RUN wget -q https://github.com/cantaloupe-project/cantaloupe/releases/download/v${VERSION}/cantaloupe-${VERSION}.zip -O temp.zip && \ RUN wget -q https://github.com/cantaloupe-project/cantaloupe/releases/download/v${VERSION}/cantaloupe-${VERSION}.zip -O temp.zip && \
unzip temp.zip && \ unzip temp.zip && \
mv cantaloupe-${VERSION} cantaloupe && \ mv cantaloupe-${VERSION} cantaloupe && \
{%- if kakadu %}
mkdir /kakadu && \ mkdir /kakadu && \
if [ "$BUILD_WITH" != "${BUILD_WITH%"kakadu"*}" ]; then mv cantaloupe/deps/Linux-x86-64/lib/* /kakadu; fi && \ mv cantaloupe/deps/Linux-x86-64/lib/* /kakadu && \
{% endif -%}
rm -r cantaloupe/deps && \ rm -r cantaloupe/deps && \
rm cantaloupe/cantaloupe.properties.sample rm cantaloupe/cantaloupe.properties.sample
ADD ./cantaloupe.properties /cantaloupe/cantaloupe.properties ADD ./cantaloupe.properties /cantaloupe/cantaloupe.properties
FROM openjdk:16-slim-buster FROM openjdk:16-slim-buster
# Change the version argument according to the cantaloupe version # This variable assignment is mandatory to use the value in ENTRYPOINT
ENTRYPOINT ["/home/cantaloupe/run.sh", "5.0.3"] ENV VERSION=${VERSION}
ENTRYPOINT ["/home/cantaloupe/run.sh", "$VERSION"]
CMD ["-Dcantaloupe.config=/home/cantaloupe/app/cantaloupe.properties"] CMD ["-Dcantaloupe.config=/home/cantaloupe/app/cantaloupe.properties"]
ARG HTTP_PORT=8182 ARG HTTP_PORT=8182
ARG BUILD_WITH=""
HEALTHCHECK --start-period=30s CMD curl -sf 0.0.0.0:${HTTP_PORT} -o /dev/null || exit 1 HEALTHCHECK --start-period=30s CMD curl -sf 0.0.0.0:${HTTP_PORT} -o /dev/null || exit 1
RUN useradd cantaloupe && mkdir -p /home/cantaloupe/.cache/cantaloupe && chown -R cantaloupe: /home/cantaloupe/.cache RUN useradd cantaloupe && mkdir -p /home/cantaloupe/.cache/cantaloupe && chown -R cantaloupe: /home/cantaloupe/.cache
COPY --chown=cantaloupe --from=build /cantaloupe/ /home/cantaloupe/app/ COPY --chown=cantaloupe --from=build /cantaloupe/ /home/cantaloupe/app/
COPY --from=build /kakadu /usr/lib/
ADD --chown=cantaloupe ./run.sh /home/cantaloupe/run.sh ADD --chown=cantaloupe ./run.sh /home/cantaloupe/run.sh
ADD --chown=cantaloupe ./delegates.rb /home/cantaloupe/app/delegates.rb ADD --chown=cantaloupe ./delegates.rb /home/cantaloupe/app/delegates.rb
RUN apt-get -qq update && \ {%- if kakadu %}
apt-get -qq install curl fontconfig libfreetype6 && \ COPY --from=build /kakadu /usr/lib/
if [ "$BUILD_WITH" != "${BUILD_WITH%"ffmpeg"*}" ]; then apt-get -qq install --no-install-recommends ffmpeg; fi && \ {% endif -%}
if [ "$BUILD_WITH" != "${BUILD_WITH%"graphicsmagick"*}" ]; then apt-get -qq install --no-install-recommends graphicsmagick; fi && \ {%- if ffmpeg or turbojpeg or openjpeg or grok %}
if [ "$BUILD_WITH" != "${BUILD_WITH%"imagemagick"*}" ]; then apt-get -qq install --no-install-recommends imagemagick; fi && \ RUN apt-get -qq update
if [ "$BUILD_WITH" != "${BUILD_WITH%"openjpeg"*}" ]; then apt-get -qq install libopenjp2-tools; fi && \ {% endif -%}
apt-get clean && \ {%- if ffmpeg %}
rm -rf /var/lib/apt/lists/* RUN apt-get -qq install --no-install-recommends ffmpeg
{% endif -%}
{%- if turbojpeg %}
RUN mkdir -p /opt/libjpeg-turbo/lib
COPY libs /opt/libjpeg-turbo/lib
{% endif -%}
{%- if openjpeg %}
RUN apt-get -qq install --no-install-recommends libopenjp2-tools
{% endif -%}
{%- if grok %}
RUN apt-get -qq install wget \
liblcms2-dev \
libpng-dev \
libzstd-dev \
libtiff-dev \
libjpeg-dev \
zlib1g-dev \
libwebp-dev \
libimage-exiftool-perl
RUN wget -q https://github.com/GrokImageCompression/grok/releases/download/v7.6.5/libgrokj2k1_7.6.5-1_amd64.deb \
&& wget -q https://github.com/GrokImageCompression/grok/releases/download/v7.6.5/grokj2k-tools_7.6.5-1_amd64.deb \
&& dpkg -i ./libgrokj2k1_7.6.5-1_amd64.deb \
&& dpkg -i --ignore-depends=libjpeg62-turbo ./grokj2k-tools_7.6.5-1_amd64.deb \
# Install OpenJDK
&& wget -q https://github.com/AdoptOpenJDK/openjdk16-binaries/releases/download/jdk-16.0.1%2B9/OpenJDK16U-jdk_x64_linux_hotspot_16.0.1_9.tar.gz \
&& tar xfz OpenJDK16U-jdk_x64_linux_hotspot_16.0.1_9.tar.gz \
&& mv jdk-16.0.1+9 /opt/jdk \
# Install Maven (the one in apt is too old for JDK16 as of 2020-05-14)
&& wget -q https://mirrors.ocf.berkeley.edu/apache/maven/maven-3/3.8.1/binaries/apache-maven-3.8.1-bin.tar.gz \
&& tar xfz apache-maven-3.8.1-bin.tar.gz \
&& mv apache-maven-3.8.1 /opt/maven \
&& rm apache-maven-3.8.1-bin.tar.gz
{% endif -%}
{%- if ffmpeg or turbojpeg or openjpeg or grok %}
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
{% endif -%}
USER cantaloupe USER cantaloupe
WORKDIR /home/cantaloupe WORKDIR /home/cantaloupe
VOLUME ["/home/cantaloupe/images"] VOLUME ["/home/cantaloupe/images"]
...@@ -39,26 +39,32 @@ Duly updated, the branches use the latest minor versions of the respective ...@@ -39,26 +39,32 @@ Duly updated, the branches use the latest minor versions of the respective
major version of Cantaloupe: major version of Cantaloupe:
- `4.x` -> `4.1.9` - `4.x` -> `4.1.9`
- `5.x.` -> `5.0.3` - `5.x.` -> `5.0.4`
### Processor versions ### Processor versions
Available processors are `ffmpeg` (for video), `kakadu` and Available processors are `ffmpeg` (for video), `kakadu`, `grok` and `openjpeg`
`openjpeg` for JPEG2000 (the former proprietary, the latter free software) and for JPEG2000 (the former proprietary, the latters free software) and
`graphicsmagick`. If you need another combination or replace `graphicsmagick` `turbojpeg`. Readily available flavors:
with `imagemagick` see below.
| name | ffmpeg | turbojpeg | grok | kakadu | openjpeg |
Readily available flavors: | --- | :---: | :---: | :---: | :---: | :---: |
| `<version>-all-kakadu` | &#10003; | &#10003; | &#215; | &#10003; | &#215; |
- `<version>-all`: `ffmpeg`, `kakadu`, `graphicsmagick` | `<version>-all-openjpeg` | &#10003; | &#10003; | &#215; | &#215; | &#10003; |
- `<version>-all-free`: `ffmpeg`, `kakadu`, `graphicsmagick` | `<version>-all-grok` | &#10003; | &#10003; | &#10003; | &#215; | &#215; |
- `<version>-images`: `graphicsmagick` | `<version>-kakadu-ffmpeg` | &#10003; | &#215; | &#215; | &#10003; | &#215; |
- `<version>-images-jp2`: `kakadu`, `graphicsmagick` | `<version>-kakadu-turbojpeg` | &#215; | &#10003; | &#215; | &#10003; | &#215; |
- `<version>-images-jp2-free`: `openjpeg`, `graphicsmagick` | `<version>-kakadu` | &#215; | &#215; | &#215; | &#10003; | &#215; |
- `<version>-jp2`: `kakadu` | `<version>-openjpeg-ffmpeg` | &#10003; | &#215; | &#215; | &#215; | &#10003; |
- `<version>-jp2-free`: `openjpeg` | `<version>-openjpeg-turbojpeg` | &#215; | &#10003; | &#215; | &#215; | &#10003; |
- `<version>-vanilla`: no additional processors | `<version>-openjpeg` | &#215; | &#215; | &#215; | &#215; | &#10003; |
- `<version>-video`: `ffmpeg` | `<version>-grok-ffmpeg` | &#10003; | &#215; | &#10003; | &#215; | &#215; |