-
-
Save pszponder/a1fca598bb2453dca76f07ceafd3c324 to your computer and use it in GitHub Desktop.
Revisions
-
usr-ein revised this gist
Feb 21, 2023 . 1 changed file with 3 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,3 +1,6 @@ # syntax=docker/dockerfile:1 # Keep this syntax directive! It's used to enable Docker BuildKit # Based on https://github.com/python-poetry/poetry/discussions/1879?sort=top#discussioncomment-216865 # but I try to keep it updated (see history) -
usr-ein revised this gist
Feb 20, 2023 . 1 changed file with 8 additions and 4 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -13,7 +13,6 @@ ENV PYTHONUNBUFFERED=1 \ PYTHONDONTWRITEBYTECODE=1 \ \ # pip PIP_DISABLE_PIP_VERSION_CHECK=on \ PIP_DEFAULT_TIMEOUT=100 \ \ @@ -51,14 +50,18 @@ RUN apt-get update \ build-essential # install poetry - respects $POETRY_VERSION & $POETRY_HOME # The --mount will mount the buildx cache directory to where # Poetry and Pip store their cache so that they can re-use it RUN --mount=type=cache,target=/root/.cache \ curl -sSL https://install.python-poetry.org | python3 - # 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 --mount=type=cache,target=/root/.cache \ poetry install --without=dev ################################ @@ -74,7 +77,8 @@ COPY --from=builder-base $POETRY_HOME $POETRY_HOME COPY --from=builder-base $PYSETUP_PATH $PYSETUP_PATH # quicker install as runtime deps are already installed RUN --mount=type=cache,target=/root/.cache \ poetry install --with=dev # will become mountpoint of our code WORKDIR /app -
usr-ein revised this gist
Feb 20, 2023 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -58,7 +58,7 @@ WORKDIR $PYSETUP_PATH COPY poetry.lock pyproject.toml ./ # install runtime deps - uses $POETRY_VIRTUALENVS_IN_PROJECT internally RUN poetry install --without=dev ################################ -
usr-ein revised this gist
Feb 20, 2023 . 1 changed file with 17 additions and 5 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,7 +1,10 @@ # Based on https://github.com/python-poetry/poetry/discussions/1879?sort=top#discussioncomment-216865 # but I try to keep it updated (see history) ################################ # PYTHON-BASE # Sets up all our shared environment variables ################################ FROM python:3.9-slim as python-base # python @@ -35,7 +38,10 @@ ENV PYTHONUNBUFFERED=1 \ ENV PATH="$POETRY_HOME/bin:$VENV_PATH/bin:$PATH" ################################ # BUILDER-BASE # 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 \ @@ -55,7 +61,10 @@ COPY poetry.lock pyproject.toml ./ RUN poetry install --no-dev ################################ # DEVELOPMENT # Image used during development / testing ################################ FROM python-base as development ENV FASTAPI_ENV=development WORKDIR $PYSETUP_PATH @@ -65,7 +74,7 @@ COPY --from=builder-base $POETRY_HOME $POETRY_HOME COPY --from=builder-base $PYSETUP_PATH $PYSETUP_PATH # quicker install as runtime deps are already installed RUN poetry install --with=dev # will become mountpoint of our code WORKDIR /app @@ -74,7 +83,10 @@ EXPOSE 8000 CMD ["uvicorn", "--reload", "main:app"] ################################ # PRODUCTION # Final image used for runtime ################################ FROM python-base as production ENV FASTAPI_ENV=production COPY --from=builder-base $PYSETUP_PATH $PYSETUP_PATH -
usr-ein revised this gist
Feb 20, 2023 . 1 changed file with 3 additions and 3 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -2,7 +2,7 @@ # but I try to keep it updated (see history) # `python-base` sets up all our shared environment variables FROM python:3.9-slim as python-base # python ENV PYTHONUNBUFFERED=1 \ @@ -16,7 +16,7 @@ ENV PYTHONUNBUFFERED=1 \ \ # poetry # https://python-poetry.org/docs/configuration/#using-environment-variables POETRY_VERSION=1.3.2 \ # make poetry install to this location POETRY_HOME="/opt/poetry" \ # make poetry create the virtual environment in the project's root @@ -45,7 +45,7 @@ RUN apt-get update \ build-essential # install poetry - respects $POETRY_VERSION & $POETRY_HOME RUN curl -sSL https://install.python-poetry.org | python3 - # copy project requirement files here to ensure they will be cached. WORKDIR $PYSETUP_PATH -
usr-ein created this gist
Feb 20, 2023 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,83 @@ # Based on https://github.com/python-poetry/poetry/discussions/1879?sort=top#discussioncomment-216865 # but I try to keep it updated (see history) # `python-base` sets up all our shared environment variables FROM python:3.8.1-slim as python-base # python ENV PYTHONUNBUFFERED=1 \ # prevents python creating .pyc 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.0.3 \ # 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" # prepend poetry and venv to path ENV PATH="$POETRY_HOME/bin:$VENV_PATH/bin:$PATH" # `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://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | 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 # `development` image is used during development / testing FROM python-base as development ENV FASTAPI_ENV=development WORKDIR $PYSETUP_PATH # copy in our built poetry + venv COPY --from=builder-base $POETRY_HOME $POETRY_HOME COPY --from=builder-base $PYSETUP_PATH $PYSETUP_PATH # quicker install as runtime deps are already installed RUN poetry install # will become mountpoint of our code WORKDIR /app EXPOSE 8000 CMD ["uvicorn", "--reload", "main:app"] # `production` image used for runtime FROM python-base as production ENV FASTAPI_ENV=production COPY --from=builder-base $PYSETUP_PATH $PYSETUP_PATH COPY ./app /app/ WORKDIR /app CMD ["gunicorn", "-k", "uvicorn.workers.UvicornWorker", "main:app"]