Skip to content

Commit

Permalink
feat(docker): restructure Dockerfile for multi-stage build
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
l-lumin authored and gitbutler-client committed Dec 27, 2024
1 parent 125e206 commit 8e3aaff
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 17 deletions.
10 changes: 9 additions & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
*
**/coverage
**/.env
**/.aws
**/.ssh
Dockerfile
docker-compose.yml
**/.DS_Store
**/venv
**/env
67 changes: 51 additions & 16 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -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"]

0 comments on commit 8e3aaff

Please sign in to comment.