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.
This commit is contained in:
parent
125e206047
commit
5b811fd66a
2 changed files with 59 additions and 16 deletions
|
|
@ -1 +1,9 @@
|
|||
*
|
||||
**/coverage
|
||||
**/.env
|
||||
**/.aws
|
||||
**/.ssh
|
||||
Dockerfile
|
||||
docker-compose.yml
|
||||
**/.DS_Store
|
||||
**/venv
|
||||
**/env
|
||||
65
Dockerfile
65
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
|
||||
ENV PYTHONUNBUFFERED=1 \
|
||||
PYTHONDONTWRITEBYTECODE=1
|
||||
|
||||
# Install build dependencies
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
ffmpeg \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
build-essential \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN pip install markitdown
|
||||
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
|
||||
ARG USERID=10000
|
||||
ARG GROUPID=10000
|
||||
RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app
|
||||
USER appuser
|
||||
|
||||
USER $USERID:$GROUPID
|
||||
|
||||
ENTRYPOINT [ "markitdown" ]
|
||||
# Entrypoint
|
||||
ENTRYPOINT ["markitdown"]
|
||||
|
|
|
|||
Loading…
Reference in a new issue