如何加快Docker构build

我正在尝试为我正在处理的项目创build一个Dockerfile。 通过aptpip安装所有必需的软件包需要几分钟的时间。 由于所需的软件包不会改变,有没有办法让我可以跳到更改的步骤?

我在OS X上运行Docker CE(版本17.06.2-ce-mac27)。

是的你可以。 创build两个图像

Dockerfile基

 FROM python:3.6 RUN pip install selenium 

然后使用下面的构build

 docker build -f Dockerfile-base -t base . 

Dockerfile

 FROM base COPY . . 

所以你不会重build基地。 并继续在主Dockerfile上工作。 还有其他可能的解决scheme,例如部署本地Nexus软件包pipe理器,并使用它在本地caching软件包。 但是对于开发者机器而言,这太费劲了

如果使用dockercaching,则只有在图层的每一层都发生了变化或者上面的图层发生了变化的情况下,才会重build图像的每一层。

 FROM alpine:latest # First layer RUN apk add git gcc # Second layer RUN apk add another-package # Third layer 

如果第一层或第二层被改变了(比如说你把openssl添加到第二行),第二层和第三层将被重build而不使用caching。
但是如果只改变了第三层,那么只有该层将不得不重build,而第一层和第二层是从cachingbuild立的。
所以有时你可以将所有应该内置的东西移动到文件顶部,然后让重build的东西经常进入其自己的层(即使更多的层增加了图像大小)。

如果你愿意把它移动到多个图像,你绝对可以像塔伦说的那样。 如果只是希望从一个图像移动到另一个图像的数据(即未安装的软件包等),则可以检入多阶段构build ,以便您可以在单个文件中定义多个图像,并让它们从在文件之前build立的那个。

要获得关于构buildcaching如何工作的更多信息,请查看文档 !