我正在尝试为我正在处理的项目创建一个Dockerfile。通过apt
和pip
安装所有必需的软件包需要几分钟时间。既然所需的包不会改变,有没有办法让我跳到需要改变的步骤?
我在OS上运行Docker CE (版本17.06.2-ce-mac27)。
发布于 2017-09-14 23:27:49
是的你可以。创建两个镜像
Dockerfile-base
FROM python:3.6
RUN pip install selenium
然后使用下面的代码进行构建
docker build -f Dockerfile-base -t base .
文档文件
FROM base
COPY . .
所以你不会重建基地。并继续处理主Dockerfile。还有其他可能的解决方案,比如部署本地Nexus package manager并使用它在本地缓存包。但是对于开发人员机器来说,这太费力了
发布于 2017-12-14 18:04:21
如果使用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!
https://stackoverflow.com/questions/46222624
复制相似问题