scaler-openenv / Dockerfile
suraj-01's picture
Update Dockerfile
62eaa59 unverified
# ── Adaptive Alert Triage β€” Optimised Dockerfile ─────────────────────────────
#
# Key change vs previous version:
# - Installs ONLY core deps from pyproject.toml (no torch / stable-baselines3)
# - torch + stable-baselines3 are in the [train] optional group β€” NOT here
# - Build time: ~60-90s (was ~2200s pulling 2GB of PyTorch)
#
# Build:
# docker build -t adaptive-alert-triage:latest .
#
#
# Run server:
# docker run -p 7860:7860 adaptive-alert-triage:latest
#
# Run inference baseline:
# docker run --rm \
# -e API_BASE_URL="https://api.openai.com/v1" \
# -e MODEL_NAME="gpt-4o-mini" \
# -e HF_TOKEN="hf_..." \
# adaptive-alert-triage:latest \
# python inference.py --n 3
#
# Environment variables (set at runtime, not here):
# API_BASE_URL β€” LLM endpoint (default: https://api.openai.com/v1)
# MODEL_NAME β€” LLM model name (default: gpt-4o-mini)
# HF_TOKEN β€” Hugging Face / OpenAI API key
# PORT β€” Server port (default: 7860)
# ── Base image ────────────────────────────────────────────────────────────────
FROM python:3.11-slim
# ── System dependencies ───────────────────────────────────────────────────────
RUN apt-get update && apt-get install -y --no-install-recommends \
gcc \
curl \
&& rm -rf /var/lib/apt/lists/*
# ── Working directory ─────────────────────────────────────────────────────────
WORKDIR /app
# ── Copy dependency manifest first (maximises Docker layer cache) ─────────────
COPY pyproject.toml .
# ── Upgrade pip/setuptools/wheel ──────────────────────────────────────────────
RUN pip install --no-cache-dir --upgrade pip setuptools wheel
RUN pip install huggingface_hub
# ── Copy full project ─────────────────────────────────────────────────────────
COPY . .
# ── Install ONLY core deps (no [train], no [viz], no [gemini]) ────────────────
# This skips torch, stable-baselines3, matplotlib, seaborn, pandas, google-genai
# Those are only needed for local training/analysis β€” not the server or inference
RUN pip install --no-cache-dir -e .
# ── Environment variables ─────────────────────────────────────────────────────
ENV PYTHONUNBUFFERED=1
ENV PYTHONPATH=/app/src:/app
ENV PORT=7860
# ── Expose port ───────────────────────────────────────────────────────────────
EXPOSE 7860
# ── Health check ──────────────────────────────────────────────────────────────
HEALTHCHECK --interval=15s --timeout=5s --start-period=30s --retries=3 \
CMD curl -f http://localhost:${PORT}/health || exit 1
# ── Add non-root user ───────────────────────────────────────────────
# Save a pristine copy of repo weights so cached HF weights can be overridden
# RUN cp -r /app/weights /app/weights_pristine 2>/dev/null || true
# RUN useradd -m -u 1000 appuser \
# && mkdir -p /app/weights /app/results /app/weights_pristine \
# && chown -R appuser:appuser /app
# USER appuser
# ── Default command: start the FastAPI server ─────────────────────────────────
CMD ["sh", "-c", \
"python -m uvicorn adaptive_alert_triage.server:app \
--host 0.0.0.0 \
--port ${PORT:-7860} \
--workers 1 \
--log-level info"]