diff --git a/.dockerignore b/.dockerignore index f59ec20..cfac036 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1 +1,9 @@ -* \ No newline at end of file +**/coverage +**/.env +**/.aws +**/.ssh +Dockerfile +docker-compose.yml +**/.DS_Store +**/venv +**/env \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 0072d9e..3eca83d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,23 +1,58 @@ -FROM python:3.13-slim-bullseye +# FFmpeg stage +FROM jrottenberg/ffmpeg:4.1-scratch AS ffmpeg -USER root +# Development stage +FROM python:3.13-bullseye AS development -ARG INSTALL_GIT=false -RUN if [ "$INSTALL_GIT" = "true" ]; then \ - apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/*; \ - fi +COPY --from=ffmpeg / / -# Runtime dependency -RUN apt-get update && apt-get install -y --no-install-recommends \ - ffmpeg \ - && rm -rf /var/lib/apt/lists/* +ENV PYTHONUNBUFFERED=1 \ + PYTHONDONTWRITEBYTECODE=1 -RUN pip install markitdown +# Install build dependencies +RUN apt-get update && apt install -y --no-install-recommends \ + build-essential \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* -# Default USERID and GROUPID -ARG USERID=10000 -ARG GROUPID=10000 +RUN pip install --no-cache-dir hatch + +WORKDIR /app +COPY . /app/ + +# Build stage +FROM python:3.13-bullseye AS build + +# Install build dependencies +RUN apt-get update && apt install -y --no-install-recommends \ + build-essential \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +RUN pip install --no-cache-dir hatch + +WORKDIR /app + +COPY pyproject.toml /app/ +COPY . /app/ -USER $USERID:$GROUPID +RUN hatch build + +# Production stage +FROM python:3.13-slim-bullseye AS production + +# Copy ffmpeg binaries +COPY --from=ffmpeg / / + +WORKDIR /app + +COPY --from=build /app/dist /tmp/dist + +RUN pip install --no-cache-dir /tmp/dist/markitdown-*.whl + +# Default USERID and GROUPID +RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app +USER appuser -ENTRYPOINT [ "markitdown" ] +# Entrypoint +ENTRYPOINT ["markitdown"]