# ---- base ---- FROM python:3.12-slim # Prevents Python from writing .pyc files & enables unbuffered logs ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ PIP_NO_CACHE_DIR=1 # System deps (curl used by healthcheck) RUN apt-get update && apt-get install -y --no-install-recommends curl \ && rm -rf /var/lib/apt/lists/* # Create non-root user RUN useradd -m -u 10001 appuser WORKDIR /app # Copy and install Python deps first (better layer caching) # Create requirements.txt with: # streamlit # pandas # sqlalchemy # psycopg2-binary # altair COPY requirements.txt . RUN python -m pip install --upgrade pip && pip install -r requirements.txt # Copy app source COPY app.py . # Switch to non-root USER appuser # Streamlit defaults ENV STREAMLIT_SERVER_HEADLESS=true \ STREAMLIT_BROWSER_GATHER_USAGE_STATS=false # Expose Streamlit port EXPOSE 8501 # Healthcheck: Streamlit readiness HEALTHCHECK --interval=30s --timeout=5s --retries=5 \ CMD curl -fsS http://localhost:8501/_stcore/health || exit 1 # Run the app CMD ["streamlit", "run", "app.py", "--server.port=8501", "--server.address=0.0.0.0"]