# 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 entrypoint.sh /app COPY init_db.py /app # 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 RUN apk add --upgrade --no-cache bash # Create a user to run our application RUN adduser -D myuser -u 1000 # 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 # Set script to be executable RUN chmod +x /app/entrypoint.sh # Switch to the created user USER myuser RUN ls -l /app RUN ls -l / # Set the script as the entrypoint ENTRYPOINT ["/app/entrypoint.sh"] # Start gunicorn with the appropriate options CMD ["gunicorn", "-b", "0.0.0.0:3000", "--log-level=debug", "--workers=3", "app:app"]