diff --git a/Dockerfile b/Dockerfile index 963ca2a..40a9579 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,20 +1,63 @@ -FROM python:3.8-slim as python-base -ENV DOCKER=true -ENV GIT_PYTHON_REFRESH=quiet +# Dockerfile from https://github.com/python-poetry/poetry/discussions/1879 +# `python-base` sets up all our shared environment variables +FROM python:3.9.5-slim as python-base +ENV PYTHONUNBUFFERED=1 \ + # prevents python creating .pyc as files + PYTHONDONTWRITEBYTECODE=1 \ + \ + # pip + PIP_NO_CACHE_DIR=off \ + PIP_DISABLE_PIP_VERSION_CHECK=on \ + PIP_DEFAULT_TIMEOUT=100 \ + \ + # poetry + # https://python-poetry.org/docs/configuration/#using-environment-variables + POETRY_VERSION=1.6.1 \ + # make poetry install to this location + POETRY_HOME="/opt/poetry" \ + # make poetry create the virtual environment in the project's root + # it gets named `.venv` + POETRY_VIRTUALENVS_IN_PROJECT=true \ + # do not ask any interactive question + POETRY_NO_INTERACTION=1 \ + \ + # paths + # this is where our requirements + virtual environment will live + PYSETUP_PATH="/opt/pysetup" \ + VENV_PATH="/opt/pysetup/.venv" \ + # Hikka + DOCKER=true \ + GIT_PYTHON_REFRESH=quiet -ENV PIP_NO_CACHE_DIR=1 \ - PYTHONUNBUFFERED=1 \ - PYTHONDONTWRITEBYTECODE=1 +# prepend poetry and venv to path +ENV PATH="$POETRY_HOME/bin:$VENV_PATH/bin:$PATH" -RUN apt update && apt install libcairo2 git build-essential -y --no-install-recommends -RUN rm -rf /var/lib/apt/lists /var/cache/apt/archives /tmp/* -RUN mkdir /data +# `builder-base` stage is used to build deps + create our virtual environment +FROM python-base as builder-base +RUN apt-get update && apt-get install --no-install-recommends -y \ + # deps for installing poetry + curl \ + # deps for building python deps + build-essential + +# install poetry - respects $POETRY_VERSION & $POETRY_HOME +RUN curl -sSL https://install.python-poetry.org | python - + +# copy project requirement files here to ensure they will be cached. +WORKDIR $PYSETUP_PATH +COPY poetry.lock pyproject.toml ./ + +# install runtime deps - uses $POETRY_VIRTUALENVS_IN_PROJECT internally +RUN poetry install --no-dev + + +# `production` image used for runtime +FROM python-base as production +COPY --from=builder-base $PYSETUP_PATH $PYSETUP_PATH -COPY . /data/Hikka WORKDIR /data/Hikka - -RUN pip install --no-warn-script-location --no-cache-dir -U -r requirements.txt +COPY . /data/Hikka EXPOSE 8080