如何为Alpine Linux缓存python软件包Docker构建?

jtlz2

一个相关的问题问:“为什么在Alpine Linux上Pandas构建缓慢?”:

为什么在Alpine Linux上安装Pandas会花费很多时间

我想知道如何解决这个问题(答案不多说),即如何缓存Alpine构建以回收任意编译的python模块以用于另一个Docker构建。

这样的预构建模块可以托管在私有仓库中。Dockerfile将如何获取此文件?

我对的解决方案特别感兴趣pandas,但是将网络扩大会很好。

感谢您的所有帮助。

艾萨克·罗萨多(Isaac Rosado)

使用不同的“运行步骤”的单独命令,每个步骤都将尝试使用上一步的缓存,一旦更改了一行,则缓存链无效,并且随后的所有行均已执行,因此您希望保持缓慢的变化顶部的东西,而经常更改底部的东西。

例如,您的Dockerfile的内容可能具有:

FROM python:2.7-alpine

RUN apk add --update bash curl
RUN apk add gcc make linux-headers musl-dev openldap-dev libxml2-dev libxslt-dev libffi-dev pcre-dev
RUN apk add cython
RUN pip install pandas
#RUN install your package/library

在上面的示例中,您将看到类似于以下的输出行(请注意显示“使用缓存”的行):

Sending build context to Docker daemon  56.83kB
Step 1/11 : FROM python:2.7-alpine
 ---> b630f364abf4
Step 2/11 : RUN apk add --update bash curl
 ---> Using cache
 ---> a611e4bbdbae
Step 3/11 : RUN apk add gcc make linux-headers musl-dev openldap-dev libxml2-dev libxslt-dev libffi-dev pcre-dev
 ---> Using cache
 ---> 87e91533771d
Step 4/11 : RUN apk add cython
 ---> Using cache
 ---> 47e0fd345aa8
Step 5/11 : RUN pip install pandas
 ---> Running in c57947f606e5

每条“使用缓存”输出行均表示未执行紧接在其上方的行,而是从缓存层获取的结果。

第一次将执行所有操作,但是在随后的执行中将更快(假设主机上的所有其他操作均保持不变)。

现在,您可以“ docker push:”到您的私有(甚至公共)注册表,并使用以以下内容开头的Dockerfile启动其他构建:

FROM <BASE IMAGE with pandas>:<TAG>

上面称为“父/基础映像”和“构建器”范例,您可以在https://docs.docker.com/develop/develop-images/baseimages/中阅读更多内容

最近,您还可以拥有“多阶段构建”,其本质上是相同的,但是经过简化,因此您可以使用单个Dockerfile:https ://docs.docker.com/develop/develop-images/multistage-build /

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何为Alpine Linux添加lastlog支持?

为Python项目构建Docker映像时如何避免重新安装软件包?

如何在Docker映像构建中安装私有Python软件包

当apk添加失败时,如何在gliderlabs / alpine Docker镜像中安装Alpine Linux软件包?

如何为Ubuntu 18.04构建Deb软件包

如何为Docker Alpine映像构建静态Go二进制文件?

如何为单个软件包使用python日志记录

如何为Spyder安装python软件包

如何将软件包安装到Docker的python?

如何构建Nim库软件包

如何在Alpine Linux 3.8上安装Chromium Masked软件包?

如何在 Alpine Linux 中重新安装所有已安装的软件包?

如何使用我的本地go软件包构建docker镜像?

如何在Alpine中安装特定的软件包版本?

使用Alpine Linux中随APK安装的Python软件包

如何为不同的构建配置指定不同的nuget软件包版本?

如何从Docker Compose安装软件包?

在Alpine Linux中寻找用于安装numpy的软件包

从Ansible使用模块软件包时如何更新软件包缓存

如何使一个Alpine软件包与另一个Alpine软件包冲突?

如何从 linux 下载 FreeBSD 软件包?

如何在CircleCI上缓存“ pip install”软件包?

如何为软件创建Snap软件包?

在Nix中,如何构建具有Python安装后脚本的软件包?

如何在整个系统范围内本地构建Python软件包?

启动板构建食谱:如何为同一PPA中的软件包正确指定构建依赖关系?

如何正确安装Python软件包?

如何安装hunspell python软件包?

如何编写Python模块/软件包?