Как уменьшить окончательный размер изображения docker, содержащий numpy, scipy и scikit-learn - PullRequest
0 голосов
/ 16 января 2020

Я разместил этот вопрос на docker хабе, так как не уверен, какое сообщество получит больше ответов на мой вопрос. Я новичок в создании docker изображений и собрал Dockerfile, который создает изображение, которое работает, но конечный размер изображения составляет 600 МБ +, и хотел бы, чтобы кто-то, кто был более продвинутым, чем я, посоветовал, если есть что-то, что я могу сделать, чтобы уменьшить это , Я прочитал много блогов о различных стратегиях для этого и прошел путь виртуальной среды Python. Я действительно обеспокоен временем сборки, так как не буду часто собирать, но хотел бы, чтобы окончательный размер изображения был немного меньше, чем он есть.

То, что я делаю, - это создание изображения с python Приложение, FAVA, который является веб-интерфейсом gui для бухгалтерской программы. Эти два python приложения достаточно просты, и команда разработчиков даже предоставляет Dockerfile на основе alpine для создания светлого образа. Однако проблема, с которой я столкнулся, заключается в том, что я хочу расширить ее, добавив расширение к этому приложению python (smart_importer), которое предоставляет некоторые функции машинного обучения, которые автоматизируют аспекты процесса импорта транзакций. Это расширение зависит от numpy, scipy и scikit-learn, и отсюда дополнительный вес. Первоначально я пытался расширить альпийский подход, который использовала команда fava, но установка scipy на alpine ужасно провалилась, что я не могу решить. Используя python slim, я могу создать довольно маленькое (<200 МБ) окончательное изображение, используя только fava и beancount ... но, как я уже сказал, это всплывающие подсказки с введением необходимых зависимостей smart_importer. </p>

Вот Dockerfile У меня есть какие-либо изменения, которые я могу легко сделать, чтобы уменьшить окончательный размер изображения, которого я не вижу? Очень ценю любые указатели, которые у вас могут быть.

FROM python:slim AS base

FROM base as builder

RUN python -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"

#WORKDIR /install
COPY ./library-dependencies.txt /tmp/library-dependencies.txt
COPY ./requirements.txt /tmp/requirements.txt
#ENV PATH="/install:${PATH}"

RUN buildDeps='build-essential gcc gfortran python3-dev' \
    && apt-get update \
    && apt-get install -y $buildDeps --no-install-recommends \
    && cat /tmp/library-dependencies.txt | egrep -v "^\s*(#|$)" | xargs apt-get install -y \
    && pip3 install --upgrade pip \
    && CFLAGS="-g0 -Wl,--strip-all -I/usr/include:/usr/local/include -L/usr/lib:/usr/local/lib" \
        pip3 install \
#       --prefix="/install" \
        --no-cache-dir \
        --compile \
        --global-option=build_ext \
        --global-option="-j 6" \
        -r /tmp/requirements.txt \
    && apt-get purge -y --auto-remove $buildDeps \
    && rm -rf /var/lib/apt/lists/* \
    && rm -r \
    /tmp/requirements.txt \
        /tmp/library-dependencies.txt

FROM base
COPY --from=builder /opt/venv /opt/venv
COPY ./library-dependencies.txt /tmp/library-dependencies.txt

RUN apt-get update \
    && cat /tmp/library-dependencies.txt | egrep -v "^\s*(#|$)" | xargs apt-get install -y \
    && apt-get install -y libgomp1 --no-install-recommends \
    && rm -rf /var/lib/apt/lists/*

ENV PATH="/opt/venv/bin:$PATH"
ENV BEANCOUNT_FILE ""
ENV FAVA_OPTIONS ""
EXPOSE 5000
CMD fava --host 0.0.0.0 $FAVA_OPTIONS $BEANCOUNT_FILE

needs.txt

# numeric packages needed for smart_importer
Cython==0.28.5
numpy==1.15.1
scipy==1.1.0
scikit-learn

#fava
fava
smart_importer

library-dependencies.txt

libopenblas-dev
liblapack-dev

libxml2-dev
libxslt1-dev
zlib1g-dev

Ответы [ 2 ]

0 голосов
/ 23 января 2020

Работает ли установка пакета py3-scipy с помощью apk?

0 голосов
/ 16 января 2020

Я бы порекомендовал Python на Alpine Linux. Любые сделанные вами изменения в Dockerfile не приведут к тому, что ваше изображение будет таким же маленьким, как у Alpine.

Это выглядит как хорошее начало: https://github.com/jfloff/alpine-python

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...