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.
58 lines
1.1 KiB
Docker
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"]
|