55 lines
1.3 KiB
Docker
55 lines
1.3 KiB
Docker
# 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" ]
|