docker - docker 镜像可以像 rpm noarch 一样跨平台吗?
问题描述
有没有办法在多架构基础图像上构建图像(用于运行时),但不指定 cpu 架构?这相当于 .rpm "noarch" 或 .dep "any" arch。
在构建 Java 和 nodejs 图像时,通常没有特定于架构的内容,提供单个通用图像会简单得多。
这与多架构不同,后者为具有相同名称的不同架构构建同一映像的多个副本。 https://www.docker.com/blog/multi-platform-docker-builds/
解决方案
这在技术上是不可能的。复杂之处不在于您尝试运行的程序不可移植,而在于 Docker 映像还包含其解释器,并且不可移植。
作为一个绝对最小的例子,考虑一个只运行一个 shell 脚本的 Docker 镜像:
#!/bin/sh
echo 'Hello, world!'
它的 Dockerfile看起来是可移植的:
FROM busybox
COPY hello.sh /bin
CMD ["/bin/hello.sh"]
但是,busybox
图像是特定于架构的;它包含 C BusyBox 代码的编译二进制文件。由于派生的映像是特定于体系结构的busybox
基础映像加上可移植的 shell 脚本,因此生成的映像是特定于体系结构的。
类似的约束适用于已编译的 JVM 或 Node 解释器。在图像堆栈中的某个时刻,您必须深入了解一些可以执行可移植内容的本机编译代码。
推荐阅读
- c++ - linux“重命名”函数调用是否阻塞直到复制(当源和目标在不同磁盘中时)完成
- jquery - 用于 jquery .load() 的 BeforeSend
- json - 当我将以下脚本与 selenium 和 Beautifulsoup 一起使用时,文本被正确提取,但 json 文件始终相同
- angular - 在 ng2-charts 中定义工具提示的新位置
- android - 无法从 CursorWindow 读取行。从图库中旋转图像时出错
- c# - UWP/C# 报告生成
- javascript - 如何将 IONIC1 项目升级到 IONIC3 项目?
- blazor - 找不到 Blazor client.dll 404
- javascript - InvalidCharacterError recaptcha__en.js
- java - 填充列表
基于另一个列表 使用 java 8 流