本文基于 https://openeuler.org/zh/blog/DCCooper/2020-09-15-isula-build-code-exploration.html博客
以及https://www.bilibili.com/video/BV1Ca4y177te视频
目的是个人总结isula-build代码运行流程,方便日后复习。也希望能对想参加isula-build构建的朋友带来一点方便
例子:isula-build ctr-img build –f Dockerfile –o docker-archive:busybox.tar:busybox:latest .
我们跟着这个流程图来走
在我们在命令行敲完
isula-build ctr-img build –f Dockerfile –o docker-archive:busybox.tar:busybox:latest .
之后:
首先找到程序的入口(cmd/cli/main.go)可以发现,main函数很简洁,我们看一下 newCliCommand()
做了什么
进入addCommands()
可以看到addCommands()里面的代码,如果使用过isula-build的朋友会发现,这个和isula-build -h
出来的帮助文档很相似
isula-build -h
我们从逐个排除的方法,能猜到 addCCommands()中的NewContainerImageBuildCmd
就是对应了ctr-img
想一想我们要研究的代码isula-build ctr-img build –f Dockerfile –o docker-archive:busybox.tar:busybox:latest .
里面就有crt-img 那么我们就点入NewContainerImageBuildCmd
看一下
这个时候我们又可以发现,这个不就和isula-build ctr-img -h
出来的帮助文档一样嘛?
isula-build ctr-img -h
那么根据我们的命令isula-build ctr-img build –f Dockerfile –o docker-archive:busybox.tar:busybox:latest .
,很明显,要进入NewBuildCmd()
中
我们进入 buildCommand
中
我们进入到 runBuild()
中
那么isula-builder是从哪接受isula-build传来的信息的呢?
我们一步一步来看,首先进入isula-builder的入口(cmd/deamon/main.go)