有时候我们会遇到一些 nginx 漏洞,所以需要修复 ingress-nginx 内部的 nginx 漏洞,但是 docker build -t 镜像太慢了。原因是dockerfile内部会make compile和make install过程。如何添加一些参数可以使 docker build 过程更快?
虽然docker构建过程提示make添加-j
参数增加线程来加速进程,但是dockerfile里面并没有make相关的参数。直接修改 dockerfile 不是一个好主意。
有时候我们会遇到一些 nginx 漏洞,所以需要修复 ingress-nginx 内部的 nginx 漏洞,但是 docker build -t 镜像太慢了。原因是dockerfile内部会make compile和make install过程。如何添加一些参数可以使 docker build 过程更快?
虽然docker构建过程提示make添加-j
参数增加线程来加速进程,但是dockerfile里面并没有make相关的参数。直接修改 dockerfile 不是一个好主意。
关于如何加快 Docker 映像的构建,没有一种好的解决方案。这可能取决于很多事情。这就是为什么我发布社区 wiki 的答案以提供尽可能多的解决方案建议,并参考各种教程。
您可以使用一些技巧来加速构建 Docker 映像。首先,我将向您介绍Google Cloud的解决方案:
提高 Docker 映像构建速度的最简单方法是指定可用于后续构建的缓存映像。您可以通过在构建配置文件中添加参数来指定缓存的图像
--cache-from
,这将指示 Docker 使用该图像作为缓存源进行构建。
您可以在此处阅读有关Docker 层缓存的更多信息。
另一种方法是像倒金字塔一样构建 Dockerfile 指令:
Dockerfile 中的每条指令都会导致创建一个镜像层。Docker 使用层来重用工作,并节省带宽。图层被缓存并且在以下情况下不需要重新计算:
- 所有之前的层都没有改变。
- 在 COPY 指令的情况下:文件/文件夹不变。
- 在所有其他指令的情况下:命令文本不变。
为了充分利用 Docker 缓存,最好尝试将层放置在需要进行大量缓慢工作但在 Dockerfile 早期不经常更改的地方,并将快速更改和快速的层放在最后。结果就像一个倒金字塔。
您也可以只复制下一步需要的文件。
查看这些关于加速构建 Docker 映像的精彩教程:
-加快 Docker 映像构建的 5 个技巧 -使用这些 Dockerfile 最佳实践加快开发流程 -[更快构建 Docker 映像的六种方法(甚至在几秒钟内)](# 六种更快地构建 Docker 映像的方法(甚至在几秒钟内)
最后,我将向您介绍这里描述的另一种方法 -如何加快您的 Docker 映像构建?你可以给你一个工具Buildkit。
Docker 18.09 发布了一个新的构建器。它被称为 Buildkit。默认情况下不使用它,所以我们大多数人仍在使用旧的。问题是,即使对于如此简单的图像,Buildkit 也快得多!
在 70 年代构建的图像上,差异约为 18 秒。这是很多,几乎 33%!
希望能帮助到你 ;)