Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何加快Docker构建_Docker - Fatal编程技术网

如何加快Docker构建

如何加快Docker构建,docker,Docker,我正在尝试为我正在处理的项目创建Dockerfile。通过apt和pip安装所有必需的软件包需要几分钟的时间。既然所需的包不会更改,有没有办法让我跳到更改的步骤 我在OS X上运行Docker CE(版本17.06.2-CE-mac27)。是的,您可以。创建两个图像 Dockerfile库 FROM python:3.6 RUN pip install selenium FROM base COPY . . 然后使用下面的代码构建 docker build -f Dockerfile-bas

我正在尝试为我正在处理的项目创建Dockerfile。通过
apt
pip
安装所有必需的软件包需要几分钟的时间。既然所需的包不会更改,有没有办法让我跳到更改的步骤


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

是的,您可以。创建两个图像

Dockerfile库

FROM python:3.6
RUN pip install selenium
FROM base
COPY . .
然后使用下面的代码构建

docker build -f Dockerfile-base -t base .
Dockerfile

FROM python:3.6
RUN pip install selenium
FROM base
COPY . .

所以你不会重建基地。继续在主Dockerfile上工作。还有其他可能的解决方案,如部署local并使用它在本地缓存包。但是,如果使用docker缓存,开发人员机器会付出太多的努力,只有在图像的每一层发生更改或上面的层发生更改时,才会重建图像的每一层

FROM alpine:latest          # First layer
RUN apk add git gcc         # Second layer
RUN apk add another-package # Third layer
如果更改了第一层或第二层(例如,将openssl添加到第二行),则第二层和第三层将在不使用缓存的情况下重建。
但是,如果只更改了第三层,则只有该层需要重建,而第一层和第二层是从缓存中构建的。
因此,有时您可以将本应很少构建的所有内容移动到文件的顶部,然后让重建的内容通常位于其自己的层的更下方(即使更多层会增加图像大小)

如果你愿意将它移动到多个图像中,你完全可以像塔伦上面说的那样。 如果您只希望将数据从一个映像移动到另一个映像(即,未安装软件包等),则可以签入该文件,从而允许您在单个文件中定义多个映像,并允许它们从文件中以前构建的映像复制数据


要获得有关构建缓存如何工作的更多信息,请查看

别忘了,这是缓存破坏操作