Files
dataset-uploader/Dockerfile

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"]