docker buildx 异构打包功能支持#1076
我们目前在 Github 依赖 GitHubCI 的能力,在对异构的Docker镜像进行打包,例如 LoongArch64。
有计划将 Github 的 CI 迁移到CNB,但是暂时还不支持打包异构镜像。
官方已有解决方案
现有的方案如果要开启多平台构建,需要开root模式,但开了就意味着着用户可以直接操控母机,有巨大的安全问题。所以没法开启
目前内部版本正在验证一个新的方案,通过开启containerd-snapshotter特性,实现rootless模式下支持模拟多平台构建。但开启这个特效同时需要环境docker27+, cgroup v2. 与我们现有的一些配套解决方案存在兼容性问题。可能会导致部分流水线执行失败。目前还在解决中。
大家可以关注这个issue, 获得最新的进展。
坐等支持 需要这个功能
mark
我觉得可以通过开启一个临时的轻量级ECS虚拟机来实现,然后可以消耗对应更多的构建时长额度
@cnb.Z49CMcbKAGA 应该是CVM [狗头],ECS是友商的产品
@cnb.Z49CMcbKAGA 欢迎购买企业版,自建机器随意接
号外: docker buildx 异构打包功能开放公测啦!
目前通过流水线中指定 runner.tags: cnb:arch:amd64:containerd-snapshotter,可以将构建指定到支持containerd-snapshotter特性的机器(ps. 未来这个标签会去掉,仅供测试,请勿在正式环境中使用)
runner.tags
cnb:arch:amd64:containerd-snapshotter
containerd-snapshotter
具体使用方法可参考: https://cnb.cool/loviselu/docker-buildx-multi-platform-example
未来计划:等整个流程跑通没啥问题,后续会把平台所有机器都开启这个特性,无需大家单独指定tag
哈?他们就没动原来的架构,都还在bate吧?只是 runner.tags: cnb:arch:amd64:containerd-snapshotter 的时候是新的
runner.tags: cnb:arch:amd64:containerd-snapshotter
刚打了个包,arm64的,正常的呀
web_trigger_one: - runner: tags: cnb:arch:amd64 services: - docker env: IMAGE_TAG: ${CNB_DOCKER_REGISTRY}/${CNB_REPO_SLUG_LOWERCASE}:latest-linux-amd64 stages: - name: docker build script: docker build -t ${IMAGE_TAG} .ide - name: docker push script: docker push ${IMAGE_TAG} - name: resolve type: cnb:resolve options: key: build-amd64 - runner: tags: cnb:arch:arm64:v8 services: - docker env: IMAGE_TAG: ${CNB_DOCKER_REGISTRY}/${CNB_REPO_SLUG_LOWERCASE}:latest-linux-arm64 stages: - name: docker build script: docker build -t ${IMAGE_TAG} .ide - name: docker push script: docker push ${IMAGE_TAG} - name: resolve type: cnb:resolve options: key: build-arm64 - services: - docker env: IMAGE_TAG: ${CNB_DOCKER_REGISTRY}/${CNB_REPO_SLUG_LOWERCASE}:latest stages: - name: await the amd64 type: cnb:await options: key: build-amd64 - name: await the arm64 type: cnb:await options: key: build-arm64 - name: manifest image: cnbcool/manifest settings: target: ${IMAGE_TAG} template: ${IMAGE_TAG}-OS-ARCH platforms: - linux/amd64 - linux/arm64 - name: remove tag type: artifact:remove-tag options: name: ${CNB_REPO_NAME} tags: - latest-linux-amd64 - latest-linux-arm64 type: docker
@cnb.ZM6fBONzBPA(Kane.Yu)
这个特性将解决什么问题?
我们目前在 Github 依赖 GitHubCI 的能力,在对异构的Docker镜像进行打包,例如 LoongArch64。
有计划将 Github 的 CI 迁移到CNB,但是暂时还不支持打包异构镜像。
设想的解决方案?如有
官方已有解决方案