如何自动化Multi-Arch-Docker Image构建

时间:2017-12-27 14:47:33

标签: docker github travis-ci dockerhub

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

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

Docker-Hub本身可以监控github仓库并启动自动构建。多数民众赞成将照顾amd64图像。但剩下的架构呢? 还有一项名为“TravisCI'我想在qemu的帮助下可以照顾到手臂的构建。 然后我认为这两个repos可以由manifest-repo静态引用。但这仍然使一些架构无法实现。

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

1 个答案:

答案 0 :(得分: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守护程序才能正常运行。