我正在尝试为我正在处理的项目创建一个Dockerfile。通过df1.columns[(df1<0).sum(0).lt(1)]
Out[338]: Index(['X', 'Z'], dtype='object')
和apt
安装所有必需的软件包需要几分钟时间。由于所需的软件包没有改变,有没有办法让我可以跳到改变的步骤?
我在OS X上运行Docker CE(版本17.06.2-ce-mac27)。
答案 0 :(得分:12)
是的,你可以。创建两个图像
<强> Dockerfile基强>
FROM python:3.6
RUN pip install selenium
然后使用下面的
进行构建docker build -f Dockerfile-base -t base .
<强> Dockerfile 强>
FROM base
COPY . .
所以你不会重建基地。并继续处理主Dockerfile。还有其他可能的解决方案,例如部署本地Nexus package manager并使用它来本地缓存包。但是对开发者机器来说太过努力了
答案 1 :(得分:6)
如果使用docker缓存,只有在图像更改或上面的图层发生更改后,才会重建图像的每个图层。
FROM alpine:latest # First layer
RUN apk add git gcc # Second layer
RUN apk add another-package # Third layer
如果更改了第一层或第二层(例如,您将openssl添加到第二行),将重建第二层和第三层,而不使用缓存。
但是如果只更改了第三层,则只需要重建该层,而第一层和第二层是从缓存构建的。
因此,有时您可以将所有应该构建的内容很少移动到文件的顶部,然后让重建的内容经常在其自己的层中进一步向下(即使更多层增加图像大小)。
如果您想将其移动到多个图像中,您绝对可以像Tarun上面所说的那样做。 如果只是您希望从一个图像移动到另一个图像的数据(即,未安装的软件包等),您可以检查multi-stage builds,这允许您在单个文件中定义多个图像并让它们复制数据从之前在文件中构建的那个。
要获取有关构建缓存如何工作的更多信息,请查看docs!