63 lines
1.6 KiB
Docker
63 lines
1.6 KiB
Docker
# syntax=docker/dockerfile:1
|
|
FROM python:3.13-slim
|
|
|
|
# Install system dependencies required for RDF processing and file decompression
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
bzip2 \
|
|
gzip \
|
|
curl \
|
|
ca-certificates \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Install uv for fast dependency management
|
|
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv
|
|
|
|
# Set working directory
|
|
WORKDIR /app
|
|
|
|
# Copy dependency files first for better layer caching
|
|
COPY pyproject.toml ./
|
|
|
|
# Install Python dependencies using uv
|
|
RUN uv pip install --system --no-cache-dir \
|
|
rdflib>=7.0.0 \
|
|
datasets>=2.0.0 \
|
|
huggingface-hub \
|
|
rich>=13.0.0 \
|
|
httpx>=0.25.0 \
|
|
pyarrow>=14.0.0 \
|
|
pandas>=2.0.0 \
|
|
requests>=2.31.0
|
|
|
|
# Copy application code
|
|
COPY scripts/ ./scripts/
|
|
COPY src/ ./src/
|
|
|
|
# Create directory for dataset processing with proper permissions
|
|
RUN mkdir -p /data/dataset_processing && \
|
|
mkdir -p /data/.cache/huggingface
|
|
|
|
# Create non-root user for security
|
|
RUN useradd -m -u 1000 -s /bin/bash appuser && \
|
|
chown -R appuser:appuser /app /data
|
|
|
|
# Switch to non-root user
|
|
USER appuser
|
|
|
|
# Set environment variables
|
|
ENV PYTHONUNBUFFERED=1 \
|
|
PYTHONDONTWRITEBYTECODE=1 \
|
|
HF_HOME=/data/.cache/huggingface \
|
|
PATH="/home/appuser/.local/bin:${PATH}"
|
|
|
|
# Set working directory to data mount point
|
|
WORKDIR /data
|
|
|
|
# Health check
|
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
|
|
CMD python -c "import sys; sys.exit(0)"
|
|
|
|
# Default entrypoint to main orchestration script
|
|
ENTRYPOINT ["python", "/app/scripts/upload_all_datasets.py"]
|
|
CMD ["--help"]
|