|
|
|
# Use an official Python runtime as a parent image
|
|
|
|
FROM python:3.8-alpine3.18 as builder
|
|
|
|
|
|
|
|
RUN apk update && apk upgrade
|
|
|
|
RUN apk add --no-cache --virtual .build-deps build-base git
|
|
|
|
RUN apk add --upgrade --no-cache bash sqlite libffi-dev tzdata
|
|
|
|
|
|
|
|
ENV TZ America/New_York
|
|
|
|
ENV PYTHONUNBUFFERED 1
|
|
|
|
|
|
|
|
# Set the working directory in the container to /app
|
|
|
|
WORKDIR /app
|
|
|
|
|
|
|
|
RUN mkdir -p /app/instance/data
|
|
|
|
|
|
|
|
# Copy the current directory contents into the container at /app
|
|
|
|
COPY app.py /app
|
|
|
|
COPY requirements.txt /app
|
|
|
|
COPY models.py /app
|
|
|
|
COPY init_db.py /app/init_db.py
|
|
|
|
|
|
|
|
# Install any needed packages specified in requirements.txt
|
|
|
|
RUN pip install --no-cache-dir -r requirements.txt
|
|
|
|
|
|
|
|
RUN apk del .build-deps
|
|
|
|
|
|
|
|
# ---- Production Stage ----
|
|
|
|
FROM python:3.8-alpine3.18 as production
|
|
|
|
|
|
|
|
# Create a user to run our application
|
|
|
|
RUN adduser -D myuser
|
|
|
|
|
|
|
|
# Copy the dependencies and installed packages from the builder image
|
|
|
|
WORKDIR /app
|
|
|
|
COPY --from=builder /app /app
|
|
|
|
COPY --from=builder /usr/local /usr/local
|
|
|
|
COPY --from=builder /usr/bin /usr/bin
|
|
|
|
RUN chown -R myuser:myuser /app
|
|
|
|
|
|
|
|
# Switch to the created user
|
|
|
|
USER myuser
|
|
|
|
|
|
|
|
# Start gunicorn with the appropriate options
|
|
|
|
CMD ["gunicorn", "-b", "0.0.0.0:3000", "--log-level=debug", "--workers=3", "app:app"]
|