专业编程基础技术教程

网站首页 > 基础教程 正文

是时候放弃docker build了(kubernetes放弃 docker)

ccvgpt 2024-07-19 12:53:35 基础教程 8 ℃

接触docker的人肯定对于docker镜像构建比较熟悉,我们先写一个dockerfile,然后执行docker build命令就可以构建出一个docker image。但docker build却并不完美。

我们先看一个简单的例子

是时候放弃docker build了(kubernetes放弃 docker)


这里第二步expose 80端口和第三步apt安装,这两部操作之间没有任何关系,但docker build是基于dockerfile 一层一层地构建的,即便没有关系的两层也只能串行执行。我们理想状态是下面左侧的图,但现实却是右侧的图。而且串行化构建不仅影响构建速度,还会带来另一个问题,如果某一层发生变化,后面依赖层都需要重新构建。理想很丰满,现实很骨感。


不仅如此,docker buildkit还依赖docker daemon进程,必须要在构建的机器上面安装docker才能构建docker镜像。为了解决这两个问题,今天给大家分享一个镜像构建神器buildkit。它可以完美地解决这两个问题,不吹不黑,上面的dockerfile如果是用buildkit构建,可以节省一半的时间。

那么buildkit是怎么解析dockerfile依赖的呢?这个就依赖于LLB,LLB对于Dockerfile就像,LLVM IR对于C语言一样。经过LLB的解析后左侧的dockerfile就可以解析成右侧的依赖树,从而实现并发构建。

最后流行一个彩蛋,最新的docker已经开始支持buildkit了,需要手动开启。

DOCKER_BUILDKIT=1 docker build .

Tags:

最近发表
标签列表