1.介绍
containerd的ctr没有build,commit功能,上文介绍的nerdctl可以完成。其实还有个工具buildkit专门用来构建镜像。
- 服务端为buildkitd,和runc或containerd后端进行连接,目前只支持这两个后端。
- 客户端为buildctl,负责解析镜像构建文件Dockerfile,并向服务端发出构建指令,所以客户端可以和服务端不在一台机器上,也不需要root权限之类。
- 服务端默认使用runc后端,但是建议使用containerd后端,这样构建出的镜像就会存在containerd的buildkit名字空间下。
- buildctl客户端可用于 Linux、macOS 和 Windows,但buildkitd服务端目前仅可用于 Linux。
2.安装
wget https://github.com/moby/buildkit/releases/download/v0.9.3/buildkit-v0.9.3.linux-amd64.tar.gz mv bin buildkit cp build* /usr/bin
3.启动
buildkitd默认运行在前台的,如果需要后面加一个 &
使用 –oci-worker=false –containerd-worker=true 参数,可以让buildkitd服务使用containerd后端buildkitd --oci-worker=false --containerd-worker=true &
4.使用
构建镜像
buildctl build --frontend=dockerfile.v0 --local context=. --local dockerfile=. --output type=image,name=httpserver:v4 frontend:使用dockerfile作为前端,也可以使用gateway.v0(未测试)。 local context: 指向当前目录,这是Dockerfile执行构建时的路径上下文,比如在从目录中拷贝文件到镜像里 local dockerfile:指向当前目录,表示Dockerfile在此目录 output 的 name: 表示构建的镜像名称
镜像会存在本地containerd的buildkit命名空间下。
查看镜像
ctr -n buildkit i ls
nerdctl -n buildkit images