Ctrl K
ComunidadGuías…

Dockerfile.base

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# syntax=docker/dockerfile:1

ARG UBUNTU_VERSION=24.04
# ARG TEMURIN_IMAGE=eclipse-temurin:25-jdk-noble

# ==========================================
# Build libvips
# ==========================================
FROM ubuntu:${UBUNTU_VERSION} AS vips-build

ARG DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential \
    ca-certificates \
    cmake \
    curl \
    glib2.0-dev \
    jq \
    libbrotli-dev \
    libde265-dev \
    libexif-dev \
    libexpat1-dev \
    libimagequant-dev \
    liblcms2-dev \
    meson \
    nasm \
    ninja-build \
    pkg-config \
    xz-utils \
    && rm -rf /var/lib/apt/lists/*

COPY scripts/native-build/ /usr/local/src/native-build/

RUN bash /usr/local/src/native-build/install.sh

ENV PKG_CONFIG_PATH=/opt/konifer-native/lib/pkgconfig
ENV CMAKE_PREFIX_PATH=/opt/konifer-native

COPY scripts/install-vips.sh /usr/local/bin/install-vips.sh

RUN chmod +x /usr/local/bin/install-vips.sh \
    && /usr/local/bin/install-vips.sh --cleanup \
    && bash /usr/local/src/native-build/generate-sbom.sh

# ==========================================
# Install Temurin JDK
# ==========================================
FROM ubuntu:${UBUNTU_VERSION} AS temurin-build

ARG DEBIAN_FRONTEND=noninteractive
ARG TARGETARCH

# Temporary workaround: eclipse-temurin:25-jdk-noble still contains 25.0.4+7,
# even though Adoptium has published the CVE-fixed 25.0.4.1+1 binaries. Restore
# this stage to `FROM eclipse-temurin:25-jdk-noble` once that tag ships the fix.
RUN apt-get update && apt-get install -y --no-install-recommends \
      ca-certificates \
      curl \
    && rm -rf /var/lib/apt/lists/* \
    && case "$TARGETARCH" in \
      amd64) \
        TEMURIN_ARCH="x64"; \
        TEMURIN_SHA256="dbb698396d478e7fa2b1e50f4103324b2a99b90569ee27c33f2261f9215cf41e"; \
        ;; \
      arm64) \
        TEMURIN_ARCH="aarch64"; \
        TEMURIN_SHA256="69df11a02cfa3ef7d7ca645e03edce6778ec090e100f6ae2b42097865730ac52"; \
        ;; \
      *) \
        echo "Unsupported target architecture: $TARGETARCH" >&2; \
        exit 1; \
        ;; \
    esac \
    && TEMURIN_ARCHIVE="OpenJDK25U-jdk_${TEMURIN_ARCH}_linux_hotspot_25.0.4.1_1.tar.gz" \
    && curl --fail --location --show-error --silent --retry 3 \
      --output /tmp/openjdk.tar.gz \
      "https://github.com/adoptium/temurin25-binaries/releases/download/jdk-25.0.4.1%2B1/${TEMURIN_ARCHIVE}" \
    && echo "${TEMURIN_SHA256}  /tmp/openjdk.tar.gz" | sha256sum --check --strict \
    && install -d /opt/java/openjdk \
    && tar --extract \
      --file /tmp/openjdk.tar.gz \
      --directory /opt/java/openjdk \
      --strip-components 1 \
      --no-same-owner \
    && rm -f /tmp/openjdk.tar.gz /opt/java/openjdk/lib/src.zip \
    && rm -rf /opt/java/openjdk/man /opt/java/openjdk/jmods

# Replace the whole stage with this
# And uncomment TEMURIN_IMAGE above
# FROM ${TEMURIN_IMAGE} AS temurin-build
#
# RUN rm -f "$JAVA_HOME/lib/src.zip" \
#     && rm -rf "$JAVA_HOME/man" \
#     && rm -rf "$JAVA_HOME/jmods"

# ==========================================
# Shared Runtime Base
# ==========================================
FROM ubuntu:${UBUNTU_VERSION} AS runtime

ARG DEBIAN_FRONTEND=noninteractive
ARG TARGETARCH

## Generated from scripts/query-runtime-deps.sh.
## Addresses CVE-2026-109518
RUN apt-get update \
    && apt-get install -y --no-install-recommends -o Acquire::Retries=0 \
        --only-upgrade apt libapt-pkg6.0t64 \
    && dpkg --compare-versions "$(dpkg-query -W -f='${Version}' apt)" ge 2.8.4ubuntu0.1 \
    && dpkg --compare-versions "$(dpkg-query -W -f='${Version}' libapt-pkg6.0t64)" ge 2.8.4ubuntu0.1 \
    && apt-get install -y --no-install-recommends \
    ca-certificates \
    libbrotli1 \
    libde265-0 \
    libexif12 \
    libexpat1 \
    libffi8 \
    libgirepository-2.0-0 \
    libglib2.0-0t64 \
    libimagequant0 \
    libjemalloc2 \
    liblcms2-2 \
    libpng16-16t64 \
    tini \
    && rm -rf /var/lib/apt/lists/*

# Tell JVM FFM consumers how to find GLib.
RUN if [ "$TARGETARCH" = "arm64" ]; then GNU_ARCH="aarch64-linux-gnu"; else GNU_ARCH="x86_64-linux-gnu"; fi && \
    cd /usr/lib/$GNU_ARCH && \
    ln -s libglib-2.0.so.0 libglib-2.0.so && \
    ln -s libgobject-2.0.so.0 libgobject-2.0.so && \
    ln -s libgmodule-2.0.so.0 libgmodule-2.0.so

ENV JAVA_HOME=/opt/java/openjdk
ENV PATH=$JAVA_HOME/bin:$PATH
ENV LD_LIBRARY_PATH=/opt/konifer-native/lib

COPY --from=temurin-build /opt/java/openjdk /opt/java/openjdk
COPY --from=vips-build /opt/konifer-native /opt/konifer-native
COPY --from=vips-build /usr/local /usr/local
COPY scripts/verify-native-runtime.sh /usr/local/bin/verify-native-runtime
RUN rm -rf \
      /opt/konifer-native/include \
      /opt/konifer-native/lib/cmake \
      /opt/konifer-native/lib/pkgconfig \
      /opt/konifer-native/share/doc \
    && ldconfig \
    && /usr/local/bin/verify-native-runtime

ENV LD_PRELOAD="libjemalloc.so.2"
ENV SVT_LOG=1

# ==========================================
# CI Base
# ==========================================
FROM runtime AS ci

ARG DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y --no-install-recommends \
    bash \
    curl \
    git \
    gzip \
    jq \
    openssh-client \
    tar \
    unzip \
    wget \
    xz-utils \
    zip \
    gpg \
    && rm -rf /var/lib/apt/lists/*

RUN install -m 0755 -d /etc/apt/keyrings \
    && curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc \
    && chmod a+r /etc/apt/keyrings/docker.asc \
    && . /etc/os-release \
    && echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu ${UBUNTU_CODENAME:-$VERSION_CODENAME} stable" > /etc/apt/sources.list.d/docker.list \
    && apt-get update \
    && apt-get install -y --no-install-recommends docker-ce-cli \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /workspace

# Keep plain `docker build -f Dockerfile.base .` focused on the deployable runtime image.
FROM runtime AS default