# syntax=docker/dockerfile:1.10.0 # SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 ARG DYNAMO_BASE_IMAGE="dynamo:latest-none" ARG EPP_IMAGE="us-central1-docker.pkg.dev/k8s-staging-images/gateway-api-inference-extension/epp:v0.5.1-dirty" ARG PYTHON_VERSION=3.12 FROM ${DYNAMO_BASE_IMAGE} AS dynamo_base FROM ${EPP_IMAGE} AS epp FROM nvcr.io/nvidia/base/ubuntu:noble-20250619 AS frontend ARG PYTHON_VERSION RUN apt-get update -y \ && apt-get install -y --no-install-recommends \ # required for EPP ca-certificates \ libstdc++6 \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* # Create dynamo user with group 0 for OpenShift compatibility RUN userdel -r ubuntu > /dev/null 2>&1 || true \ && useradd -m -s /bin/bash -g 0 dynamo \ && [ `id -u dynamo` -eq 1000 ] \ && mkdir -p /home/dynamo/.cache /opt/dynamo /workspace \ && chown -R dynamo: /opt/dynamo /home/dynamo/.cache /workspace \ && chmod -R g+w /opt/dynamo /home/dynamo/.cache /workspace # Set HOME so ModelExpress can find the cache directory ENV HOME=/home/dynamo # Switch to dynamo user USER dynamo ENV DYNAMO_HOME=/opt/dynamo WORKDIR / COPY --chown=dynamo: --from=epp /epp /epp COPY --chown=dynamo: container/launch_message/frontend.txt /opt/dynamo/.launch_screen # Copy tests, benchmarks, deploy and components with correct ownership COPY --chown=dynamo: tests /workspace/tests COPY --chown=dynamo: examples /workspace/examples COPY --chown=dynamo: benchmarks /workspace/benchmarks COPY --chown=dynamo: deploy /workspace/deploy COPY --chown=dynamo: components/ /workspace/components/ COPY --chown=dynamo: recipes/ /workspace/recipes/ # Copy attribution files with correct ownership COPY --chown=dynamo: ATTRIBUTION* LICENSE /workspace/ ENV VIRTUAL_ENV=/opt/dynamo/venv ENV PATH="/opt/dynamo/venv/bin:$PATH" # Copy virtual environment directly from dynamo_base (dev image) # This includes all installed packages: dynamo, nixl, requirements.txt, requirements.test.txt # Copy uv to system /bin COPY --from=dynamo_base /bin/uv /bin/uvx /bin/ RUN uv python install $PYTHON_VERSION COPY --chown=dynamo: --from=dynamo_base /opt/dynamo/venv/ /opt/dynamo/venv/ # Setup environment for all users USER root RUN chmod 755 /opt/dynamo/.launch_screen && \ echo 'source /opt/dynamo/venv/bin/activate' >> /etc/bash.bashrc && \ echo 'cat /opt/dynamo/.launch_screen' >> /etc/bash.bashrc USER dynamo ENTRYPOINT ["/epp"] CMD ["/bin/bash"]