markitdown/Dockerfile
lumin 5b811fd66a feat(docker): restructure Dockerfile for multi-stage build
Update the Dockerfile to implement a multi-stage build process. 
Introduce a dedicated FFmpeg stage and separate development, build, 
and production stages to optimize image size and improve build 
efficiency. Add necessary dependencies and configure the 
environment for better performance. Update the .dockerignore 
to exclude sensitive files and unnecessary directories.
2024-12-27 22:56:36 +09:00

58 lines
1.1 KiB
Docker

# FFmpeg stage
FROM jrottenberg/ffmpeg:4.1-scratch AS ffmpeg
# Development stage
FROM python:3.13-bullseye AS development
COPY --from=ffmpeg / /
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1
# Install build dependencies
RUN apt-get update && apt-get 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 . /app/
# Build stage
FROM python:3.13-bullseye AS build
# Install build dependencies
RUN apt-get update && apt-get 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/
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
ENTRYPOINT ["markitdown"]