fix(Dockerfile): reposition COPY intructions to prevent cache invalidation

This commit is contained in:
Julien Neuhart
2026-03-31 19:01:13 +02:00
parent 20522fd1ac
commit 8b65315a09

View File

@@ -147,10 +147,8 @@ RUN apt-get update -qq \
# Cleanup. # Cleanup.
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# Copy PDFtk jar and create bash wrapper. # PDFtk bash wrapper.
# See https://github.com/gotenberg/gotenberg/pull/273. # See https://github.com/gotenberg/gotenberg/pull/273.
COPY --link --from=downloader-stage /downloads/pdftk-all.jar /usr/bin/pdftk-all.jar
RUN printf '#!/bin/bash\n\nexec java -jar /usr/bin/pdftk-all.jar "$@"' > /usr/bin/pdftk \ RUN printf '#!/bin/bash\n\nexec java -jar /usr/bin/pdftk-all.jar "$@"' > /usr/bin/pdftk \
&& chmod +x /usr/bin/pdftk && chmod +x /usr/bin/pdftk
@@ -162,12 +160,17 @@ RUN usermod -aG root gotenberg \
&& chgrp -R 0 /home/gotenberg \ && chgrp -R 0 /home/gotenberg \
&& chmod -R g=u /home/gotenberg && chmod -R g=u /home/gotenberg
# COPY instructions last to maximize cache reuse when only source code changes.
# Improve fonts subpixel hinting and smoothing. # Improve fonts subpixel hinting and smoothing.
# Credits: # Credits:
# https://github.com/arachnys/athenapdf/issues/69. # https://github.com/arachnys/athenapdf/issues/69.
# https://github.com/arachnys/athenapdf/commit/ba25a8d80a25d08d58865519c4cd8756dc9a336d. # https://github.com/arachnys/athenapdf/commit/ba25a8d80a25d08d58865519c4cd8756dc9a336d.
COPY --link build/fonts.conf /etc/fonts/conf.d/100-gotenberg.conf COPY --link build/fonts.conf /etc/fonts/conf.d/100-gotenberg.conf
# Copy PDFtk jar.
COPY --link --from=downloader-stage /downloads/pdftk-all.jar /usr/bin/pdftk-all.jar
# Copy the pdfcpu binary (shared across all variants). # Copy the pdfcpu binary (shared across all variants).
COPY --link --from=pdfcpu-binary-stage /home/pdfcpu /usr/bin/ COPY --link --from=pdfcpu-binary-stage /home/pdfcpu /usr/bin/
@@ -198,9 +201,6 @@ ARG GOTENBERG_VERSION=snapshot
ARG GOTENBERG_USER_GID=1001 ARG GOTENBERG_USER_GID=1001
ARG GOTENBERG_USER_UID=1001 ARG GOTENBERG_USER_UID=1001
# Copy the Gotenberg binary (full variant with all modules).
COPY --link --from=gotenberg-binary-stage /home/gotenberg /usr/bin/
LABEL org.opencontainers.image.title="Gotenberg" \ LABEL org.opencontainers.image.title="Gotenberg" \
org.opencontainers.image.description="A Docker-based API for converting documents to PDF." \ org.opencontainers.image.description="A Docker-based API for converting documents to PDF." \
org.opencontainers.image.version="$GOTENBERG_VERSION" \ org.opencontainers.image.version="$GOTENBERG_VERSION" \
@@ -235,6 +235,11 @@ RUN echo "deb http://deb.debian.org/debian trixie-backports main" >> /etc/apt/so
# Cleanup. # Cleanup.
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# COPY instructions last to maximize cache reuse.
# Copy the Gotenberg binary (full variant with all modules).
COPY --link --from=gotenberg-binary-stage /home/gotenberg /usr/bin/
# Copy unoconverter. # Copy unoconverter.
COPY --link --from=downloader-stage /downloads/unoconverter /usr/bin/unoconverter COPY --link --from=downloader-stage /downloads/unoconverter /usr/bin/unoconverter
@@ -265,9 +270,6 @@ ARG GOTENBERG_VERSION=snapshot
ARG GOTENBERG_USER_GID=1001 ARG GOTENBERG_USER_GID=1001
ARG GOTENBERG_USER_UID=1001 ARG GOTENBERG_USER_UID=1001
# Copy the Gotenberg binary (Chromium variant — no LibreOffice modules).
COPY --link --from=gotenberg-binary-stage /home/gotenberg-chromium /usr/bin/gotenberg
LABEL org.opencontainers.image.title="Gotenberg (Chromium)" \ LABEL org.opencontainers.image.title="Gotenberg (Chromium)" \
org.opencontainers.image.description="A Docker-based API for converting documents to PDF — Chromium variant." \ org.opencontainers.image.description="A Docker-based API for converting documents to PDF — Chromium variant." \
org.opencontainers.image.version="$GOTENBERG_VERSION" \ org.opencontainers.image.version="$GOTENBERG_VERSION" \
@@ -282,6 +284,11 @@ RUN apt-get update -qq \
# Cleanup. # Cleanup.
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# COPY instructions last to maximize cache reuse.
# Copy the Gotenberg binary (Chromium variant, no LibreOffice modules).
COPY --link --from=gotenberg-binary-stage /home/gotenberg-chromium /usr/bin/gotenberg
# Copy dictionnaries so that hyphens work on Chromium. # Copy dictionnaries so that hyphens work on Chromium.
# See https://github.com/gotenberg/gotenberg/issues/1293. # See https://github.com/gotenberg/gotenberg/issues/1293.
COPY --link --chown="$GOTENBERG_USER_UID:$GOTENBERG_USER_GID" build/chromium-hyphen-data /opt/gotenberg/chromium-hyphen-data COPY --link --chown="$GOTENBERG_USER_UID:$GOTENBERG_USER_GID" build/chromium-hyphen-data /opt/gotenberg/chromium-hyphen-data
@@ -305,9 +312,6 @@ FROM common-stage AS gotenberg-libreoffice
ARG GOTENBERG_VERSION=snapshot ARG GOTENBERG_VERSION=snapshot
# Copy the Gotenberg binary (LibreOffice variant — no Chromium modules).
COPY --link --from=gotenberg-binary-stage /home/gotenberg-libreoffice /usr/bin/gotenberg
LABEL org.opencontainers.image.title="Gotenberg (LibreOffice)" \ LABEL org.opencontainers.image.title="Gotenberg (LibreOffice)" \
org.opencontainers.image.description="A Docker-based API for converting documents to PDF — LibreOffice variant." \ org.opencontainers.image.description="A Docker-based API for converting documents to PDF — LibreOffice variant." \
org.opencontainers.image.version="$GOTENBERG_VERSION" \ org.opencontainers.image.version="$GOTENBERG_VERSION" \
@@ -335,6 +339,11 @@ RUN echo "deb http://deb.debian.org/debian trixie-backports main" >> /etc/apt/so
# Cleanup. # Cleanup.
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# COPY instructions last to maximize cache reuse.
# Copy the Gotenberg binary (LibreOffice variant, no Chromium modules).
COPY --link --from=gotenberg-binary-stage /home/gotenberg-libreoffice /usr/bin/gotenberg
# Copy unoconverter. # Copy unoconverter.
COPY --link --from=downloader-stage /downloads/unoconverter /usr/bin/unoconverter COPY --link --from=downloader-stage /downloads/unoconverter /usr/bin/unoconverter