diff --git a/Dockerfile b/Dockerfile index ca225e1..73de7f5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,18 +1,38 @@ +# Build stage +FROM python:3.11-slim as builder + +WORKDIR /app + +# Install system dependencies +RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/* + +# Install Poetry +RUN curl -sSL https://install.python-poetry.org | python3 - +ENV PATH="/root/.local/bin:$PATH" +RUN poetry self add "poetry-plugin-export" + +# Copy only dependency files to leverage Docker layer caching +COPY pyproject.toml poetry.lock ./ + +# Install dependencies +RUN poetry export -f requirements.txt --without-hashes -o requirements.txt +RUN pip install --no-cache-dir -r requirements.txt + +# Runtime stage FROM python:3.11-slim WORKDIR /app -RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/* - -RUN curl -sSL https://install.python-poetry.org | python3 - - -# Ensure Poetry is available in PATH -ENV PATH="/root/.local/bin:$PATH" -RUN poetry self add "poetry-plugin-export" - -COPY pyproject.toml poetry.lock ./ - -RUN poetry export -f requirements.txt --without-hashes -o requirements.txt -RUN pip install --no-cache-dir -r requirements.txt +# Copy only the necessary files from the builder stage +COPY --from=builder /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages +COPY --from=builder /usr/local/bin /usr/local/bin +# Copy application code COPY . . + +# Health check +HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 \ + CMD curl -f http://localhost:8718/health || exit 1 + +# Default command +CMD ["python", "-m", "agentic_security"]