From d5b6cbb95ebe44cb41904d7e031b83cbe234dde2 Mon Sep 17 00:00:00 2001 From: "James R. Barlow" Date: Tue, 28 May 2019 15:36:50 -0700 Subject: [PATCH] Update Ubuntu dockerfile --- .docker/Dockerfile | 103 ++++++++++++++++++++++++--------------------- 1 file changed, 56 insertions(+), 47 deletions(-) diff --git a/.docker/Dockerfile b/.docker/Dockerfile index ebb63ddd..62fac8d3 100644 --- a/.docker/Dockerfile +++ b/.docker/Dockerfile @@ -1,17 +1,60 @@ # OCRmyPDF # -FROM ubuntu:18.04 +FROM ubuntu:19.04 as base + +FROM base as builder + +ENV LANG=C.UTF-8 RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential autoconf automake libtool \ libleptonica-dev \ zlib1g-dev \ - libexempi3 \ ocrmypdf \ pngquant \ python3-pip \ python3-venv \ tesseract-ocr \ + unpaper \ + wget \ + git + + +# Compile and install jbig2 +# Needs libleptonica-dev, zlib1g-dev +RUN \ + mkdir jbig2 \ + && wget -q https://github.com/agl/jbig2enc/archive/0.29.tar.gz -O - | \ + tar xz -C jbig2 --strip-components=1 \ + && cd jbig2 \ + && ./autogen.sh && ./configure && make && make install \ + && cd .. \ + && rm -rf jbig2 + +RUN python3 -m venv /appenv + +COPY . /app + +WORKDIR /app + +RUN . /appenv/bin/activate; \ + pip install --upgrade pip \ + && pip install . + +FROM base + +ENV LANG=C.UTF-8 + +RUN apt-get update && apt-get install -y --no-install-recommends \ + ghostscript \ + img2pdf \ + liblept5 \ + zlib1g \ + pngquant \ + python3 \ + python3-venv \ + qpdf \ + tesseract-ocr \ tesseract-ocr-chi-sim \ tesseract-ocr-deu \ tesseract-ocr-eng \ @@ -21,52 +64,18 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ unpaper \ wget +# Copy +COPY --from=builder /app/misc/webservice.py /app/ -ENV LANG=C.UTF-8 +# Copy minimal project files to get the test suite. +COPY --from=builder /app/setup.cfg /app/setup.py /app/README.md /app/ +COPY --from=builder /app/requirements /app/requirements +COPY --from=builder /app/tests /app/tests +COPY --from=builder /app/src /app/src -# Compile and install jbig2 -# Needs libleptonica-dev, zlib1g-dev -RUN \ - mkdir jbig2 \ - && wget -q https://github.com/agl/jbig2enc/archive/0.29.tar.gz -O - | \ - tar xz -C jbig2 --strip-components=1 \ - && cd jbig2 \ - && ./autogen.sh && ./configure && make && make install \ - && cd .. \ - && rm -rf jbig2 +COPY --from=builder /appenv /appenv +COPY --from=builder /usr/local /usr/local -RUN apt-get remove -y autoconf automake libtool +WORKDIR /data -RUN python3 -m venv --system-site-packages /appenv - -# This installs the latest binary wheel instead of the code in the current -# folder. Installing from source will fail, apparently because cffi needs -# build-essentials (gcc) to do a source installation -# (i.e. "pip install ."). It's unclear to me why this is the case. -RUN . /appenv/bin/activate; \ - pip install --upgrade pip \ - && pip install --upgrade ocrmypdf - -# Now copy the application in, mainly to get the test suite. -# Do this now to make the best use of Docker cache. -COPY . /application -RUN . /appenv/bin/activate; \ - pip install -r /application/requirements/test.txt - -# Remove the junk, including the source version of application since it was -# already installed -RUN rm -rf /tmp/* /var/tmp/* /root/* /application/ocrmypdf \ - && apt-get remove -y build-essential \ - && apt-get autoremove -y \ - && apt-get autoclean -y - -RUN useradd docker \ - && mkdir /home/docker \ - && chown docker:docker /home/docker - -USER docker -WORKDIR /home/docker - -# Must use array form of ENTRYPOINT -# Non-array form does not append other arguments, because that is "intuitive" -ENTRYPOINT ["/application/.docker/docker-wrapper.sh"] +ENTRYPOINT ["/appenv/bin/ocrmypdf"]