gpt4 book ai didi

python - 如何缓存 Alpine Linux 的 Python 包 Docker 构建?

转载 作者:行者123 更新时间:2023-12-01 09:23:55 26 4
gpt4 key购买 nike

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

Why does it take ages to install Pandas on Alpine Linux

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

这样的预构建模块可以托管在私有(private)存储库中。 Dockerfile 如何获取这个?

我对 pandas 的解决方案特别感兴趣,但如果能把网撒得更广就更好了。

感谢您的帮助。

最佳答案

使用不同的单独命令,“RUN步骤”,每个步骤都会尝试使用前一步的缓存,一旦一行发生变化,缓存链就会失效,并且所有后续行都会被执行,所以你想保留顶部的事情变化缓慢,而底部的事情变化频繁。

例如,您的 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

每个“Using cache”输出行都表示上面的行没有被执行,而是从缓存层获取结果。

第一次所有内容都会被执行,但在接下来的执行中会快得多(假设主机上的其他所有内容保持不变)。

现在您可以“docker push :”到您的私有(private)(甚至公共(public))注册表,并使用以下开头的 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/

关于python - 如何缓存 Alpine Linux 的 Python 包 Docker 构建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50598811/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com