有时我们会遇到一些nginx漏洞,所以我们需要修复ingress nginx内部的nginx漏洞,但是docker构建-t镜像太慢了。原因是dockerfile内部会进行编译和制作安装过程。如何添加一些参数可以使docker构建过程更快?
尽管docker构建过程会提示make添加-j
参数以增加线程数来加速该过程,但dockerfile中没有make相关的参数。直接修改dockerfile不是一个好主意。
dockerfile文件的Source。
发布于 2021-10-26 07:02:54
这可能取决于许多事情。这就是为什么我要发布社区wiki的答案,以提供尽可能多的解决方案建议,参考各种教程。
有一些技巧可以用来加快构建Docker镜像的速度。首先,我将向您介绍Google cloud的解决方案
提高Docker镜像构建速度的最简单方法是指定可用于后续构建的缓存镜像。您可以通过在构建配置文件中添加
--cache-from
参数来指定缓存的镜像,这将指示Docker使用该镜像作为缓存源进行构建。
你可以在这里阅读更多关于Docker Layer Caching的内容。
另一种方式是Structure your Dockerfile instructions like an inverted pyramid
Dockerfile文件中的每个指令都会导致创建一个图像层。Docker使用层来重用工作,并节省带宽。如果满足以下条件,层将被缓存,并且不需要重新计算:
所有之前的层都是拷贝指令的大小写: the files/
为了更好地利用Docker缓存,一个好主意是尝试将需要进行大量缓慢工作的层放在Dockerfile早期更改不频繁的层中,并将快速变化和快速变化的层放在最后。结果就像一个倒金字塔。
您也可以使用Only copy files which are needed for the next step。
看看这些关于加速构建Docker镜像的很棒的教程:
-5 Tips to Speed up Your Docker Image Build -Speed Up Your Development Flow With These Dockerfile Best Practices -Six更快构建Docker镜像的方法(甚至在几秒钟内)(#更快地构建Docker镜像的六种方法(甚至在几秒钟内)
在最后,我将向您介绍这里描述的另一种方法-- How to speed up your Docker image build?,您可以使用工具构建工具包。
随着Docker18.09的发布,
发布了一个新的构建器。它被称为Buildkit。默认情况下不使用它,所以我们中的大多数人仍然使用旧的。问题是,即使对于如此简单的图像,Buildkit也要快得多!在70年代构建的图像上,差异大约是18秒。这是一个很大的数字,几乎33%!
希望它能有所帮助;)
发布于 2021-10-27 02:57:37
docker版本: docker-ce.20.10
由buildkit制作的镜像的实际测试
如果它们在内部涉及到大量的编译过程,那么实际上可能对提高制作图像的效率几乎没有什么作用。
也许基于官方的阿尔卑斯山基地图像,
考虑在dockerfile中添加-j nproc参数来增加线程,这将是一个很好的方向。
https://stackoverflow.com/questions/69716689
复制相似问题