簡體   English   中英

如何減小包含 numpy、scipy 和 scikit-learn 的最終 docker 鏡像大小

[英]How to reduce final docker image size containing numpy, scipy, and scikit-learn

我已經在 docker hub 上發布了這個問題,但我不確定哪個社區會對我的問題有更多的回應。 我是創建 docker 鏡像的新手,並且已經組合了一個 Dockerfile 來創建一個有效的鏡像,但最終鏡像大小為 600MB+,並且希望有人比我更先進,如果我能做些什么來減少這種情況。 我已經閱讀了許多關於這樣做的各種策略的博客,並且已經走上了 Python 虛擬環境路線。 我真的很擔心構建時間,因為我不會經常構建,但希望看到最終的圖像尺寸比實際尺寸更精簡。

我正在做的是使用 python 應用程序構建圖像,fava 是會計程序 beancount 的 Web gui 前端。 僅這兩個 python 應用程序就足夠簡單了,fava 團隊甚至提供了一個基於 alpine 的 Dockerfile 來構建輕量級鏡像。 但是,我遇到的問題是我想通過包含對此 python 應用程序 (smart_importer) 的擴展來擴展它,該應用程序提供了一些機器學習功能,可以自動執行事務導入過程的各個方面。 這個擴展依賴於 numpy、scipy 和 scikit-learn,這就是額外權重的來源。 我最初嘗試擴展 fava 團隊采用的 alpine 方法,但在 alpine 上安裝 scipy 失敗了,我無法解決。 使用 python slim 我可以只用 fava 和 beancount 構建一個相當小的(<200mb)最終圖像......

這是我目前擁有的 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

要求.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

庫-dependencies.txt

libopenblas-dev
liblapack-dev

libxml2-dev
libxslt1-dev
zlib1g-dev

使用 apk 安裝 py3-scipy 包是否有效?

我會在 Alpine Linux 上推薦 Python。 您所做的任何 Dockerfile 更改都不會使您的映像幾乎與 Alpine 一樣小。

這看起來是一個好的開始: https : //github.com/jfoff/alpine-python

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM