「InfoQ」Docker 镜像构建教程,多平台


「InfoQ」Docker 镜像构建教程,多平台
文章图片
AdrianMouat被誉为DockerCaptain , 他是ContainerSolutions公司的首席科学家 。 目前 , 他正开发Trow , 这是一个容器镜像注册中心 , 用于安全管理Kubernetes集群中的镜像流 。
当前 , Docker镜像已经成为测试和部署新的第三方软件的标准工具 。 Adrian是开源Trow注册中心的主要开发者 , 而Docker镜像则是人们安装该工具的主要方式 。 如果他不提供镜像 , 其他人最终也会推出他们自己的镜像 , 这样会导致重复工作 , 并产生维护问题 。
默认情况下 , 我们创建的Docker镜像运行在linux/amd64平台上 。 它适用于大多数的开发机器和云提供商 , 但却忽略其他平台的用户 。 这个群体很庞大——想想基于树莓派的家庭实验室、生产物联网设备的公司、运行在IBM大型机上的组织以及使用低功耗arm64芯片的云 。
一般来说 , 这些平台的用户通常会构建自己的镜像或寻找其他解决方案 。
那么 , 你该如何为这些平台构建镜像?最明显的方法是在目标平台上构建镜像 。 这适用于很多情况 。 但是如果你的目标是s390x , 我希望你有可以使用的IBM大型机 。 更常见的平台 , 比如树莓派、物联网设备通常电量有限 , 速度慢或无法构建镜像 。
【「InfoQ」Docker 镜像构建教程,多平台】我们该怎么做?有两个选项:1.目标平台仿真 , 2.交叉编译 。 有趣的是 , 我发现有种方法可以将这两个选项结合的效果最好 。
仿真让我们从第一个选项——仿真开始 。 有一个很不错的项目叫QEMU , 它可以模拟很多平台 。 随着最近buildx的预览 , 将QEMU用于Docker变得更加容易 。
QEMU集成依赖于一个Linux内核特性 , 该特性有个稍显神秘的名字binfmt_mischandler 。 当Linux遇到其无法识别的可执行文件格式(例如 , 一个用于不同体系结构的文件格式)时 , 它将使用该处理程序检查是否配置了什么“用户空间应用程序”来处理该格式(例如 , 模拟器或VM) 。 如果有 , 它将把可执行文件传递给该应用程序 。
为实现这一点 , 我们需要在内核中注册我们关注的平台 。 如果你正在使用DockerDesktop , 那么对于大多数常见平台 , 你就无需做这项工作 。 如果你正使用Linux , 你可以通过运行最新的docker/binfmt镜像 , 以与DockerDesktop相同的方式注册处理程序 , 例如:
查看更多点击文末了解更多查看更多原文内容


    推荐阅读