使用builctl(buildkit)构建映像,然后使用docker运行它

jexiocij  于 2023-02-18  发布在  Docker
关注(0)|答案(1)|浏览(246)

我想使用最新版本的buildkit来构建我的docker映像,因为最新版本的docker中包含的buildkit版本存在一些bug。
是否可以使用buildctl命令构建映像的本地版本,然后使用docker run运行此映像?
我尝试添加--output type=image,name=<tag>,push=false,但docker没有找到此映像。我希望避免推送此映像,因为它仅用于运行某些测试。我已设法使用--export-cache type=local,dest=<folder>在本地导出该高速缓存,但我不确定如何从docker run使用它。
或者,是否可以升级docker在其发布的dind容器中使用的buildkit版本?

fhity93d

fhity93d1#

根据文档,当使用buildxdocker驱动程序(也使用BuildKit)时,您应该能够使用type=docker,并且它会将其加载到docker守护进程中。
https://docs.docker.com/engine/reference/commandline/buildx_build/#output
映像导出程序将生成结果作为映像或清单列表写入。使用Docker驱动程序时,映像将显示在Docker映像中。或者,可以通过指定属性将映像自动推送到注册表。
属性键:

name - name (references) for the new image.
push - boolean to automatically push the image.

我不确定buildctl/buildkitd有何不同,但是当我尝试使用docker输出时,它会让您指定一个输出文件,而不是将其加载到守护进程中。
因此,除了直接加载外,还可以将其保存为一个tarball,然后加载到docker中。

buildctl build --frontend dockerfile.v0 \
  --opt build-arg:VERSION=$BUILD_VERSION \
  --opt context=my-image:$BUILD_VERSION \
  --local context=. \
  --local dockerfile=. \
  --output type=docker,dest=./my-image_$BUILD_VERSION.tar,name=my-image:$BUILD_VERSION

docker load --input my-image.tar

可能有一个更直接的方法,但这是唯一的方法,我可以找到,而尝试所有的输出选项,从真正有限的文档buildkitd/buildctl,以及尝试和失败,以创建一个本地映像通过docker buildx

相关问题