FROM --platform=linux/amd64 python:3.13-slim-bullseye as compile-amd64 ARG TARGETOS ARG TARGETARCH ARG TARGETVARIANT RUN echo "I'm building for $TARGETOS/$TARGETARCH/$TARGETVARIANT" COPY requirements.txt /opt/kcc/ ENV PATH="/opt/venv/bin:$PATH" RUN DEBIAN_FRONTEND=noninteractive apt-get update -y && apt-get -yq upgrade && \ apt-get install -y libpng-dev libjpeg-dev 7zip unrar-free libgl1 && \ python -m pip install --upgrade pip && \ python -m venv /opt/venv && \ python -m pip install -r /opt/kcc/requirements.txt ###################################################################################### FROM --platform=linux/arm64 python:3.13-slim-bullseye as compile-arm64 ARG TARGETOS ARG TARGETARCH ARG TARGETVARIANT RUN echo "I'm building for $TARGETOS/$TARGETARCH/$TARGETVARIANT" ENV LC_ALL=C.UTF-8 \ LANG=C.UTF-8 \ LANGUAGE=en_US:en SHELL ["/bin/bash", "-o", "pipefail", "-c"] COPY requirements.txt /opt/kcc/ ENV PATH="/opt/venv/bin:$PATH" RUN set -x && \ TEMP_PACKAGES=() && \ KEPT_PACKAGES=() && \ # Packages only required during build TEMP_PACKAGES+=(build-essential) && \ TEMP_PACKAGES+=(cmake) && \ TEMP_PACKAGES+=(libfreetype6-dev) && \ TEMP_PACKAGES+=(libfontconfig1-dev) && \ TEMP_PACKAGES+=(libpng-dev) && \ TEMP_PACKAGES+=(libjpeg-dev) && \ TEMP_PACKAGES+=(libssl-dev) && \ TEMP_PACKAGES+=(libxft-dev) && \ TEMP_PACKAGES+=(make) && \ TEMP_PACKAGES+=(python3-dev) && \ TEMP_PACKAGES+=(python3-setuptools) && \ TEMP_PACKAGES+=(python3-wheel) && \ # Packages kept in the image KEPT_PACKAGES+=(bash) && \ KEPT_PACKAGES+=(ca-certificates) && \ KEPT_PACKAGES+=(chrpath) && \ KEPT_PACKAGES+=(locales) && \ KEPT_PACKAGES+=(locales-all) && \ KEPT_PACKAGES+=(libfreetype6) && \ KEPT_PACKAGES+=(libfontconfig1) && \ KEPT_PACKAGES+=(7zip) && \ KEPT_PACKAGES+=(python3) && \ KEPT_PACKAGES+=(python3-pip) && \ KEPT_PACKAGES+=(unrar-free) && \ # Install packages DEBIAN_FRONTEND=noninteractive apt-get update -y && apt-get -yq upgrade && \ DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ ${KEPT_PACKAGES[@]} \ ${TEMP_PACKAGES[@]} \ && \ # Install required python modules python -m pip install --upgrade pip && \ python -m venv /opt/venv && \ python -m pip install -r /opt/kcc/requirements.txt ###################################################################################### FROM --platform=linux/arm/v7 python:3.13-slim-bullseye as compile-armv7 ARG TARGETOS ARG TARGETARCH ARG TARGETVARIANT RUN echo "I'm building for $TARGETOS/$TARGETARCH/$TARGETVARIANT" ENV LC_ALL=C.UTF-8 \ LANG=C.UTF-8 \ LANGUAGE=en_US:en SHELL ["/bin/bash", "-o", "pipefail", "-c"] COPY requirements.txt /opt/kcc/ ENV PATH="/opt/venv/bin:$PATH" RUN set -x && \ TEMP_PACKAGES=() && \ KEPT_PACKAGES=() && \ # Packages only required during build TEMP_PACKAGES+=(build-essential) && \ TEMP_PACKAGES+=(cmake) && \ TEMP_PACKAGES+=(libffi-dev) && \ TEMP_PACKAGES+=(libfreetype6-dev) && \ TEMP_PACKAGES+=(libfontconfig1-dev) && \ TEMP_PACKAGES+=(libpng-dev) && \ TEMP_PACKAGES+=(libjpeg-dev) && \ TEMP_PACKAGES+=(libssl-dev) && \ TEMP_PACKAGES+=(libxft-dev) && \ TEMP_PACKAGES+=(make) && \ TEMP_PACKAGES+=(python3-dev) && \ TEMP_PACKAGES+=(python3-setuptools) && \ TEMP_PACKAGES+=(python3-wheel) && \ # Packages kept in the image KEPT_PACKAGES+=(bash) && \ KEPT_PACKAGES+=(ca-certificates) && \ KEPT_PACKAGES+=(chrpath) && \ KEPT_PACKAGES+=(locales) && \ KEPT_PACKAGES+=(locales-all) && \ KEPT_PACKAGES+=(libfreetype6) && \ KEPT_PACKAGES+=(libfontconfig1) && \ KEPT_PACKAGES+=(7zip) && \ KEPT_PACKAGES+=(python3) && \ KEPT_PACKAGES+=(python3-pip) && \ KEPT_PACKAGES+=(unrar-free) && \ # Install packages DEBIAN_FRONTEND=noninteractive apt-get update -y && apt-get -yq upgrade && \ DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ ${KEPT_PACKAGES[@]} \ ${TEMP_PACKAGES[@]} \ && \ # Install required python modules python -m pip install --upgrade pip && \ python -m venv /opt/venv && \ python -m pip install --upgrade pillow psutil requests python-slugify raven packaging mozjpeg-lossless-optimization natsort distro numpy ###################################################################################### FROM --platform=linux/amd64 python:3.13-slim-bullseye as build-amd64 COPY --from=compile-amd64 /opt/venv /opt/venv FROM --platform=linux/arm64 python:3.13-slim-bullseye as build-arm64 COPY --from=compile-arm64 /opt/venv /opt/venv FROM --platform=linux/arm/v7 python:3.13-slim-bullseye as build-armv7 COPY --from=compile-armv7 /opt/venv /opt/venv ###################################################################################### # Select final stage based on TARGETARCH ARG FROM build-${TARGETARCH}${TARGETVARIANT} LABEL com.kcc.name="Kindle Comic Converter base image" LABEL com.kcc.author="Ciro Mattia Gonano, Paweł Jastrzębski and Darodi" LABEL org.opencontainers.image.description='Kindle Comic Converter base image' LABEL org.opencontainers.image.documentation='https://github.com/ciromattia/kcc' LABEL org.opencontainers.image.source='https://github.com/ciromattia/kcc' LABEL org.opencontainers.image.authors='darodi' LABEL org.opencontainers.image.url='https://github.com/ciromattia/kcc' LABEL org.opencontainers.image.documentation='https://github.com/ciromattia/kcc' LABEL org.opencontainers.image.vendor='ciromattia' LABEL org.opencontainers.image.licenses='ISC' LABEL org.opencontainers.image.title="Kindle Comic Converter" ENV PATH="/opt/venv/bin:$PATH" WORKDIR /app RUN DEBIAN_FRONTEND=noninteractive apt-get update -y && apt-get -yq upgrade && \ apt-get install -y 7zip unrar-free && \ ln -s /app/kindlegen /bin/kindlegen && \ echo docker-base-20241116 > /IMAGE_VERSION