|
| 1 | +# syntax=docker/dockerfile:1 |
| 2 | + |
| 3 | +# Comments are provided throughout this file to help you get started. |
| 4 | +# If you need more help, visit the Dockerfile reference guide at |
| 5 | +# https://docs.docker.com/go/dockerfile-reference/ |
| 6 | + |
| 7 | +# Want to help us make this template better? Share your feedback here: https://forms.gle/ybq9Krt8jtBL3iCk7 |
| 8 | + |
| 9 | +ARG PYTHON_VERSION=3.12.1 |
| 10 | +FROM python:${PYTHON_VERSION}-slim as base |
| 11 | + |
| 12 | +# Prevents Python from writing pyc files. |
| 13 | +ENV PYTHONDONTWRITEBYTECODE=1 |
| 14 | + |
| 15 | +# Keeps Python from buffering stdout and stderr to avoid situations where |
| 16 | +# the application crashes without emitting any logs due to buffering. |
| 17 | +ENV PYTHONUNBUFFERED=1 |
| 18 | + |
| 19 | +WORKDIR /app |
| 20 | + |
| 21 | +# Create a non-privileged user that the app will run under. |
| 22 | +# See https://docs.docker.com/go/dockerfile-user-best-practices/ |
| 23 | +ARG UID=10001 |
| 24 | +RUN adduser \ |
| 25 | + --disabled-password \ |
| 26 | + --gecos "" \ |
| 27 | + --home "/nonexistent" \ |
| 28 | + --shell "/sbin/nologin" \ |
| 29 | + --no-create-home \ |
| 30 | + --uid "${UID}" \ |
| 31 | + appuser |
| 32 | + |
| 33 | +# Download dependencies as a separate step to take advantage of Docker's caching. |
| 34 | +# Leverage a cache mount to /root/.cache/pip to speed up subsequent builds. |
| 35 | +# Leverage a bind mount to requirements.txt to avoid having to copy them into |
| 36 | +# into this layer. |
| 37 | +RUN --mount=type=cache,target=/root/.cache/pip \ |
| 38 | + --mount=type=bind,source=requirements.txt,target=requirements.txt \ |
| 39 | + python -m pip install -r requirements.txt |
| 40 | + |
| 41 | +# Switch to the non-privileged user to run the application. |
| 42 | +USER appuser |
| 43 | + |
| 44 | +# Copy the source code into the container. |
| 45 | +COPY . . |
| 46 | + |
| 47 | +# Expose the port that the application listens on. |
| 48 | +EXPOSE 5000 |
| 49 | + |
| 50 | +# Run the application. |
| 51 | +CMD python3 -m flask run --host=0.0.0.0 |
0 commit comments