「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相同的方式注册处理程序 , 例如:
查看更多点击文末了解更多查看更多原文内容
推荐阅读
- InfoQ8 年,只为下载动漫视频,二次元“中毒”患者?一黑客操纵僵尸网络
- 爱思助手FaceTime 视频通话镜像到电视屏幕上?,如何将
- InfoQ如何让技术落地更有竞争力,“仰望星空”式的人才培养
- InfoQ技术招聘已经变味了
- 「InfoQ」代码没人懂,一个bug导致千万损失,程序开发者去世
- 镜像娱乐@腾讯音乐娱乐集团向全音频“声”态迈进,酷我畅听搭建“内容、主播、用户”铁三角
- InfoQ■Python 切换到 Go的9 个理由,从
- 「InfoQ」这波什么操作?,放弃微服务,改用宏服务,Uber
- 「InfoQ」架构师除了扩容还能干什么?,扩容扩容扩容
- InfoQ▲如何正确高效地阅读源代码?