自从我们提供公共镜像库以来,不少同学询问是否支持手工上传镜像到镜像库。答案是:不支持。
今天给大家聊一聊为什么公共镜像库不应该支持手工上传,主要基于以下几个方面的考量:
Code First
建木作为一个完整实现GitOps理念的工具,开发团队在实现任何服务时所秉承和推广的当然也首选Code First的方式。
因此,我们提供的公共镜像库与GitHub和国内的Gitee都实现了集成,用户授权后可以直接选择代码库中的Dockerfile来进行镜像的构建,后续还会完成与更多代码托管平台的集成。
当然也支持根据分支、Tag等来设置自动构建计划的规则。
一旦使用了Code First的方式,用户就无需自己维护构建服务器或者在本地手工进行镜像构建。
镜像的变更与版本记录与镜像构建的过程一一对应,可追溯可审计,完美符合当前主流的工程理念。
便于生成软件物料清单(SBOM)
不提供手工上次镜像的功能的另一个理由是保证公共库镜像的安全性。最近的研究报告显示,恶意镜像已经成为软件供应链攻击中的攻击手段。而软件物料清单(SBOM)是应对软件供应链攻击的工具之一。
什么是SBOM
软件物料清单 (SBOM) 是一份正式记录,其中包含用于构建软件的各种组件的详细信息和供应链关系。BOM(物料清单)的说法来源于制造业的MES系统,简单说就是类似成分列表。当然BOM也可以包含层次结构,可以层层包含,列表中的组成部分可以继续拆分为子BOM。
在最新的OCI镜像标准中,已经有了推荐的SBOM的描述规范,但是如何生成SBOM并且进行可信的数字签名对于大部分用户仍然是个问题。
因此,建木Hub后续也将在镜像构建过程中增加相关的支持来降低针对公共镜像的软件供应链攻击风险。
上行带宽占用
众所周知,维护一个公共镜像库需要相当高的成本。因此建木Hub目前使用了CDN来优化镜像下载速度和降低镜像下载的流量成本,但是如果开放手工Push镜像功能,对于上行带宽和流量的成本暂时还没有好的优化方案。
总结
基于以上考量,建木Hub的公共镜像仓库不会开通手工上传镜像的功能。当然,随着产品的迭代完善,我们将会在私有镜像仓库中提供手工上传镜像的功能。如果大家确实需要,敬请期待。
最后,放上我们的服务地址。建木Hub 欢迎使用!