一个相关问题问道"为什么Pandas在Alpine Linux上构建缓慢?":
Why does it take ages to install Pandas on Alpine Linux
我想知道如何解决这个问题(答案没有说),即如何缓存Alpine
版本以便回收任意编译的python
模块在另一个Docker构建中使用。
这样的预建模块可以托管在私人仓库中。 Dockerfile如何获取它?
我对pandas
的解决方案特别感兴趣,但将网络扩大更为完美。
感谢您的帮助。
答案 0 :(得分:1)
使用不同的“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
每个“使用缓存”输出行表示上面的行未执行,但结果取自缓存层。
第一次执行所有内容,但在以下执行中会更快(假设主机上的其他内容保持不变)。
现在您可以“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/