如何设置docker使用每个构build步骤的registry中的caching

我有两台服务器与docker和一个服务器与我的私人registry。

我在第一台机器上build立了Dockerfile; 然后我把图像推送到registry。

是否有可能立即在我的registry中使用caching在第二台机器上构buildDockerfile? 如果没有,有没有办法加快构build“几乎”相同的Docker文件,而不写我自己的caching?

它试图设置--registry-mirror但没有帮助。

对于docker> 1.10,我发现这个问题上的一些东西: https : //github.com/docker/docker/issues/20316#issuecomment-221289631

鉴于此Dockerfile

 FROM busybox RUN mkdir this-is-a-test RUN echo "hello world" 

运行docker build -t caching-test .

然后我们可以用docker history cache-test来查看包含图片的图层

 3e4a484f0e67 About an hour ago /bin/sh -c echo "Hello world!" 0 B 6258cdec0c4b About an hour ago /bin/sh -c mkdir this-is-a-test 0 B 47bcc53f74dc 9 weeks ago /bin/sh -c #(nop) CMD ["sh"] 0 B <missing> 9 weeks ago /bin/sh -c #(nop) ADD file:47ca6e777c36a4cfff 1.113 MB 

在1.11中保存/加载的变化保留了父层和子层之间的关系,但只有当它们通过docker保存在一起保存时。 通过运行docker inspect test | grep Parent.可以看到最终testing图像的父节点 docker inspect test | grep Parent.

 $ docker inspect caching-test | grep Parent "Parent": "sha256:6258cdec0c4bef5e5627f301b541555883e6c4b385d0798a7763cb191168ce09", 

这是Docker历史输出中的第二层。

为了使用保存和加载重新创buildcaching,您需要保存所有引用为父项的图像和图层。 实际上,这通常意味着您需要将每个图层以及FROM图像保存在同一个命令中。

docker save caching-test 6258cdec0c4b busybox > caching-test.tar – 注意,我们也可以给图层名称,而不是ID保存命令。

让我们清除一切,然后从tar文件重新加载图像。 docker rmi $(docker images -q) 。 确认没有图像存在。

然后运行docker load -i caching-test.tar 。 如果你看图像,你会看到busybox,然后进行cachingtesting。 运行docker history caching-test将显示与图像最初构build时完全相同的输出。 这是因为父母/子女的关系是通过保存和加载保存的。 你甚至可以运行docker inspect caching-test | grep Parent docker inspect caching-test | grep Parent并看到与父图层相同的ID。

运行同一个Dockerfile的重build会告诉你正在使用caching。

 Sending build context to Docker daemon 5.391 MB Step 1 : FROM busybox ---> 47bcc53f74dc Step 2 : RUN mkdir this-is-a-test ---> Using cache ---> 6258cdec0c4b Step 3 : RUN echo "hello world" ---> Using cache ---> 3e4a484f0e67 Successfully built 3e4a484f0e67 

编辑:下面这个只有在docker1.10之前

在第二台机器上,您可以在build造新的机器之前,将docker pull theimagefromthefirstdockerfileontheregistry从第一个文件docker pull theimagefromthefirstdockerfileontheregistry

这样你就可以确定每一层都在第二台机器上。

docker引擎不会查询registry每次一层(甚至不知道它),它会太慢/沉重,所以我不认为有另一种方式。

注意:由于PR 26839(“基于历史数组的实现构buildcaching”)已合并,因此问题20316(“拉取构buildcaching”)已closures。

它允许实例从之前的CI构build的图像中指定--cache-from

添加指定在构build中用作caching源的图像的function。 这些图像不需要有本地母链,可以从其他registry中提取。 用户需要确保只使用可信图像作为来源。

用法:

 docker pull myimage:v1.0 docker build --cache-from myimage:v1.0 -t myimage:v1.1 . 

查看合并提交7944480 , docker1.13(2017年1月) 。