我已经在
github上对一个nodejs app进行了docker化.我的Dockerfile基于官方nodejs图像.官方node-repo无缝地支持多种体系结构(x86,amd64,arm).这意味着我可以在不同的机器上构建完全相同的Dockerfile,从而为相应的架构生成不同的图像.
所以我也试图为我的应用程序无缝地提供相同的架构.但是怎么样?
我的目标是尽可能地自动化它.
我知道理论上我需要创建一个docker-manifest,它充当docker-repo并将最终用户-docker-clients重定向到他们合适的图像.
Docker-Hub本身可以监视github仓库并启动自动构建.多数民众赞成将照顾amd64图像.但剩下的架构呢?
还有一项叫做“TravisCI”的服务,我想可以在qemu的帮助下完成手臂的构建.
然后我认为这两个repos可以由manifest-repo静态引用.但这仍然使一些架构无法实现.
但使用多种服务/构建相同应用程序的方式感觉不对.有谁知道这个问题的更好,更完整的解决方案?
它基本上通过几台机器运行相同的dockerfile并将其记录在清单中.
最佳答案 从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守护程序才能正常运行.