![为什么docker镜像是特定于架构的?](https://linux22.com/image/767393/%E4%B8%BA%E4%BB%80%E4%B9%88docker%E9%95%9C%E5%83%8F%E6%98%AF%E7%89%B9%E5%AE%9A%E4%BA%8E%E6%9E%B6%E6%9E%84%E7%9A%84%EF%BC%9F.png)
我想更好地理解 - 为什么 Docker 镜像是特定于架构的?为什么我需要针对 ARM 处理器架构使用不同于 ARM64 AArch32 等的镜像?
Docker 镜像显然包含特定于处理器的指令,这使得它们依赖于体系结构
。码头工人图片包含处理器特定指令和为什么?
为什么Docker-Runtime 不提供抽象层吗,其与架构无关?
是不是因为这个层与虚拟机中的 HyperVisor 层相当,不再是“轻量级”的了?
答案1
docker 镜像的预期内容是什么?应用程序 + 所有支持库和任何其他所需文件。
这在实践中通常意味着什么?基本上是精简的 Linux 用户空间 + 应用程序。
当然,并非每个文件都是特定于体系结构的,但二进制文件和库是针对某些特定体系结构编译的(无论它们是否放置在 docker 镜像中,情况显然都是如此)。
这里没有什么魔法,docker 镜像只是打包和分发应用程序的一种方式。它不会将为 x86-64、arm64 或其他任何平台编译的应用程序转换为与架构无关的应用程序。
如果应用程序采用某种非编译语言,例如 Python 应用程序或 Nodejs 应用程序,那么上述内容仅适用于运行时;Python 运行时或 Nodejs 运行时是为某些特定架构构建的,需要为该架构构建适当的支持库。