Table of Contents

Docker 运行镜像的系统需求


系统(OS)

总结:没有系统限制

假设我们在OSA上build镜像,镜像内部使用的OSB,然后放到OSC上运行。如果OSB选择的是Linux的话,那么基本不会遇到任何问题,然后考虑A和C:能不能运行基本和OSA没有关系;OSC如果是Linux的话没问题(Docker原本就是为Linux设计的),如果是Windows或者Mac的话,Docker也都可以运行,但是可能不是原生的,比如Windows上就要依赖Hyper-V or WSL(官方好像推荐WSL)。一个Image,内部包含一个基础OS(这个是确定的),至于外部的运行环境(宿主机,这个是不确定的)影响不大。

指令集(ISA)

常见的指令集: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,我们有什么可控的呢?

  1. QEMU:通过在 Docker 中集成 QEMU,一个开源的机器模拟器和虚拟化器,可以实现跨架构的容器运行。QEMU 可以模拟 ARM64 等其他架构,从而允许在 AMD64 机器上运行 ARM64 容器”
  2. 构建多架构镜像:Docker 提供了构建和运行多架构镜像的支持,特别是通过 Docker Buildx 插件。这种方式可以在一个命令中同时为多种架构构建镜像,并且可以在不同架构的系统上运行”

Docker一般都是用来运行一些服务,所以都是跑在Linux-x64上,不会遇到什么问题