【问题标题】:How to automate Multi-Arch-Docker Image builds如何自动化 Multi-Arch-Docker 镜像构建
【发布时间】:2017-12-27 14:47:33
【问题描述】:

我已经在 github 上对一个 nodejs 应用程序进行了 docker 化。我的 Dockerfile 基于官方的 nodejs 图像。官方 node-repo 无缝支持多种架构(x86、amd64、arm)。这意味着我可以在不同的机器上构建完全相同的 Dockerfile,从而为各自的架构生成不同的图像。

所以我也在尝试为我的应用无缝地提供相同的架构。但是怎么做? 我的目标是尽可能地自动化它。 我知道理论上我需要创建一个 docker-manifest,它充当 docker-repo 并将最终用户-docker-clients 重定向到他们合适的图像。

Docker-Hub 本身可以监控 github 存储库并启动自动构建。那会照顾amd64图像。但是剩下的架构呢? 还有一个名为“TravisCI”的服务,我想它可以在 qemu 的帮助下处理 arm-build。 然后我认为清单存储库可以静态引用这两个存储库。但这仍然使一些架构无法实现。

但是使用多种服务/方式来构建同一个应用程序感觉不对。有谁知道这个问题的更好和更完整的解决方案? 它基本上是通过几台机器运行相同的 dockerfile 并将它们记录在清单中。

【问题讨论】:

标签: docker github travis-ci dockerhub


【解决方案1】:

从 Docker 18.02 CLI 开始,如果您启用了客户端实验性功能,您可以创建多架构清单并将它们推送到 docker 注册表。在构建之后,我能够使用 VSTS 并为多架构标签创建自定义构建任务。我遵循了这个模式。

docker manifest create --amend {multi-arch-tag} {os-specific-tag-1} {os-specific-tag-2}
docker manifest annotate {multi-arch-tag} {os-specific-tag-1} --os {os-1} --arch {arch-1}
docker manifest annotate {multi-arch-tag} {os-specific-tag-2} --os {os-2} --arch {arch-2}
docker manifest push --purge {multi-arch-tag}

附带说明,我在自定义 VSTS 任务中打包了适用于 Windows 和 Linux 的 18.02 docker CLI,因此不需要安装 docker。 manifest 命令似乎不需要 docker 守护程序才能正常运行。

【讨论】:

  • 虽然您的回答解释了如何制作清单列表,但我相信问题主要是关于以合理的方式为每个架构构建映像,而不使用大量不同的 CI 服务。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-11
  • 2020-06-02
  • 1970-01-01
  • 2017-12-22
  • 2020-10-06
相关资源
最近更新 更多