# build stage FROM python:3.12-slim-bookworm as BUILDER # set environment variables ENV PYTHONUNBUFFERED=1 \ PYTHONDONTWRITEBYTECODE=1 \ PIP_NO_CACHE_DIR=off \ PIP_DISABLE_PIP_VERSION_CHECK=ON \ PIP_DEFAULT_TIMEOUT=100 \ DEBIAN_FRONTEND=noninteractive \ POETRY_HOME=/etc/poetry \ POETRY_VERSION=1.7.1 \ POETRY_VIRTUALENVS_IN_PROJECT=1 \ POETRY_VIRTUALENVS_CREATE=1 \ POETRY_NO_INTERACTION=1 \ POETRY_CACHE_DIR=/tmp/poetry_cache \ APP_HOME=/home/app # update system RUN apt-get update \ && apt-get install -y --no-install-recommends \ build-essential \ curl \ && apt-get clean # install poetry RUN curl -sSL https://install.python-poetry.org | python3 - ENV PATH="${POETRY_HOME}/bin:$PATH" # install runtime dependencies WORKDIR ${APP_HOME} COPY ./poetry.lock ./pyproject.toml ./ RUN --mount=type=cache,target=${POETRY_CACHE_DIR} poetry install \ --with shared,model \ --no-root # final stage FROM python:3.12-slim-bookworm # copy virtualenv made by poetry ENV APP_HOME=/home/app \ VIRTUAL_ENV=/home/app/.venv COPY --from=builder ${VIRTUAL_ENV} ${VIRTUAL_ENV} ENV PATH="${VIRTUAL_ENV}/bin:${PATH}" # create home directory and app user RUN mkdir -p $APP_HOME # add code while changing ownership WORKDIR $APP_HOME COPY ./shared ./shared COPY ./model/src ./ ENTRYPOINT [ "python", "main.py" ]