总结:没有系统限制
假设我们在OSA上build镜像,镜像内部使用的OSB,然后放到OSC上运行。如果OSB选择的是Linux的话,那么基本不会遇到任何问题,然后考虑A和C:能不能运行基本和OSA没有关系;OSC如果是Linux的话没问题(Docker原本就是为Linux设计的),如果是Windows或者Mac的话,Docker也都可以运行,但是可能不是原生的,比如Windows上就要依赖Hyper-V or WSL(官方好像推荐WSL)。一个Image,内部包含一个基础OS(这个是确定的),至于外部的运行环境(宿主机,这个是不确定的)影响不大。
常见的指令集:ARM64 / AMD64(x64)
总结:能不能运行和指令集相关
在ISA-A的机器上build镜像,那么默认build出来的镜像就是ISA-A,如果放到ISA-B的机器上运行,很可能就会出点什么问题。在Image完成构建后,我们可以在[OS/ARCH]一栏(在Docker Hub Web上)看到Image的信息,比如:linux/arm64/v8,这是我在M1 Mac上构建的基于Ubuntu的Image,可以看到Image是有对ISA的需求的。尝试在AMD64的机器上运行一下这个Image,输出如下(虽然跑起来了,但是有警告,说不定内部塞点其他的软件就跑不起来了):
C:\Users\Admin>docker run -it toookyo/ubuntu22-py311 bash WARNING: The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/amd64/v4) and no specific platform was requested root@d4afd4906188:/app# uname -a Linux d4afd4906188 5.15.167.4-microsoft-standard-WSL2 #1 SMP Tue Nov 5 00:21:55 UTC 2024 aarch64 aarch64 aarch64 GNU/Linux
那么关于ISA,我们有什么可控的呢?
Docker一般都是用来运行一些服务,所以都是跑在Linux-x64上,不会遇到什么问题