我可以将Docker镜像构建到"缓存"一个yocto / bitbake构建?

时间:2016-08-08 01:23:46

标签: docker yocto

我为项目构建Yocto图像,但这是一个漫长的过程。在我强大的开发机器上,它需要大约3个小时,最多可以消耗100 GB的空间。

问题是最终的图像不是"必然"最终目标;它是我的应用程序,它运行在它之上,这很重要。因此,yocto食谱不会发生太大变化,但我的应用程序确实如此。

我想为我的应用程序运行持续集成(CI),甚至连续交付(CD)。但由于yocto构建的规模,两者现在都很难。

由于构建方式没有太大变化,我可以使用"缓存"它在某种程度上用于我的应用程序的CI / CD和我的Docker。这将非常有趣,因为我可以维护该图像并与需要处理该项目并在CI / CD中使用它的同事共享。

  1. 是否可以为这种用途构建自定义Docker镜像?
  2. 是否可以完全脱机构建这样的图像?我不想上传100GB而必须在构建机器上重新下载...
  3. 谢谢!

1 个答案:

答案 0 :(得分:4)

1。是。

我已经使用docker来构建Yocto图像有很多不同的原因,总是有积极的结果。

2。是的,做了一些工作。

您希望利用Yocto缓存您所需要的所有内容以及所谓的#34; Shared State Cache"这一事实。这通常位于${BUILDDIR} / sstate-cache下的构建目录中,它包含您在这种情况下正在寻找的内容。 如何将这些文件提供给构建计算机有几个选项。

选项1 正在使用sstate mirrors

这不是完全脱机,但允许您从该缓存中下载更小的缓存并构建,而不是从源代码。

这是我的local.conf文件中的内容:

SSTATE_MIRRORS ?= "\
file://.* http://my.shared-computer.com/some-folder/PATH"

不要忘记最后的PATH。这是必需的。构建系统替换目录结构中的正确路径。

选项2 可让您保留sstate-cache的本地副本并从本地构建。

在您的dockerfile中,创建sstate-cache目录(这里的位置并不重要,我喜欢/ opt用于我的目的):

RUN mkdir -p /opt/yocto/sstate-cache

然后确保在运行构建时绑定这些目录以保留内容,如下所示:

docker run ... -v /place/to/save/cache:/opt/yocto/sstate-cache

编辑构建目录中的local.conf,使其指向这些文件夹:

SSTATE_DIR ?= "/opt/yocto/sstate-cache"

通过这种方式,您可以以最适合自己的方式(scp,nfs,sneakernet)将缓存放到构建计算机上。

希望这有帮助!