Files
datacat/Dockerfile
Tanishq Dubey bbce85fa31 feat: add Dockerfile, dry-run mode, and documentation
- Add Dockerfile with multi-stage build using UV
- Add --dry-run CLI flag to log metrics instead of submitting
- Add comprehensive README with usage and metrics documentation
- Fix ruff linter warnings
- Add uv.lock for reproducible builds
2025-12-16 11:53:16 -05:00

47 lines
1.0 KiB
Docker

# Build stage
FROM python:3.12-slim AS builder
# Install uv
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv
# Set working directory
WORKDIR /app
# Copy dependency files
COPY pyproject.toml uv.lock ./
COPY src ./src
# Create virtual environment and install dependencies
RUN uv sync --no-dev --frozen
# Runtime stage
FROM python:3.12-slim AS runtime
# Create non-root user
RUN useradd --create-home --shell /bin/bash datacat
# Set working directory
WORKDIR /app
# Copy virtual environment from builder
COPY --from=builder /app/.venv /app/.venv
# Copy application code
COPY --chown=datacat:datacat src ./src
# Set environment variables
ENV PATH="/app/.venv/bin:$PATH"
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1
# Switch to non-root user
USER datacat
# Health check - verify the app can at least parse args
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD python -m datacat --help > /dev/null 2>&1 || exit 1
# Default command
ENTRYPOINT ["python", "-m", "datacat"]
CMD []