python - 如何减少包含 numpy、scipy 和 scikit-learn 的最终 docker 映像大小
问题描述
我已经在 docker hub 上发布了这个问题,但我不确定哪个社区会对我的问题有更多的回应。我是创建 docker 映像的新手,并且已经整理了一个 Dockerfile,该 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 软件包是否有效?
推荐阅读
- artificial-intelligence - 基于树搜索的游戏 AI:如何通过稀疏奖励避免 AI“徘徊”/“拖延”?
- python - matplotlib 中标签之间的空间
- java - java 8中的调用方法
- javascript - 将 SVG 转换为 Highcharts.SVGRenderer.prototype.symbols
- selenium - 未创建 HTML 文件 - 范围报告 (Junit)
- java - “com.sun.tools.javac.util.Assert”类型不可访问
- java - 将地图转换为地图列表
- java - 为什么 pluginManager.getExtensions 的结果为空?
- android - 带有 PdfRenderer 的 SecurityException,带有受密码保护的 pdf,即使使用普通 pdf 也会重复
- jquery - Chartjs:动态数据(数组)不起作用