精简版
我想知道为什么需要为多种架构创建 Docker 镜像的技术原因。此外,尚不清楚这里的重点是为每个 CPU 架构还是为操作系统创建映像。操作系统不应该抽象架构吗?
长版
我可以理解为什么 Docker Engine 必须移植到多个架构。它是一个将与操作系统交互、进行系统调用的软件,最终它只是表示为特定指令集中的一系列指令的代码,用于特定的架构。因此,必须将 Docker 引擎移植到多个操作系统/体系结构,就像必须移植 Microsoft Word 一样。
同样的事情也会发生在——比如说——JVM,或者VirtualBox。
但是,与 Docker 不同的是,为 Windows 上的 JVM 编写的软件可以在 Linux 上运行。JVM 将抽象底层操作系统/架构的差异,并在两个平台上运行相同的代码。
为什么 Docker 映像不是这种情况?为什么 Docker 引擎不能仅仅抽象出差异,并提供一个通用的接口,这样镜像本身就不需要与特定的操作系统/架构兼容?
这是一个决定(比如“让我们为每个架构制作不同的图像,因为它对于原因 X 更好”),还是 Docker 工作方式的结果(比如“我们需要这样做,因为 Docker 需要 Y”)?
笔记
- 我不是在哭“天哪,为什么??”。这不是咆哮或批评,我只是在为不同架构需要不同图像寻找技术解释。
- 我不是在问如何创建多架构图像。
- 我不是在寻找诸如“需要多架构图像以便您可以在各种平台上运行图像”之类的答案,而是回答“为什么?”,而不是“为什么需要这样?” (这是我的问题)。
除此之外,当您看到图像时,它通常os/arch
在摘要中有一个,如下所示:
图片的具体目标是什么?操作系统、架构,还是两者兼而有之?操作系统不应该抽象底层架构吗?
编辑:我开始假设每个架构都需要不同的图像:图像将包含其中的应用程序。假设它将包含 Go 编译器。Go 编译器本身是一个二进制文件,必须已经编译到不同的架构。的图像x86-64
将包含编译为的 Go 编译器x86-64
,依此类推。这个对吗?如果这是正确的,这是唯一的原因吗?