Docker多平台镜像(multi-platform images)¶
Docker镜像可以支持多平台(multiple platforms),意味着单个镜像可能包含针对不同架构的变体(contain variants for different architectures),有时候还包含了针对不同的操作系统(例如Windows)的变体。
当运行一个支持多平台的镜像, docker
会自动选择匹配你的OS和架构的镜像。
大多数存储在Docker Hub的docker官方镜像都提供一系列架构。例如 busybox
镜像支持 amd64, arm32v5, arm32v6, arm32v7, arm64v8, i386, ppc64le, s390x
。当运行在 x86_64 / amd64
主机时,会自动下载和运行 amd64
。
构建多平台镜像¶
采用 Buildx
的 BuildKit
可以为多平台构建镜像,而不会仅限于构建时用户恰好使用的体系结构和操作系统。
调用 build
的时候,可以设置 --platform
参数来指定构建输出的目标平台(例如, linux/amd64
, linux/arm64
或者 darwin/amd64
)。
如果当前构建实例的后端是采用 docker-container
驱动,则可以同时指定多个平台架构。此时,会构建一个清单列表,其中包含所有指定架构的镜像。这样,当使用 docker run
或者在docker服务中使用这个镜像时,Docker会自动根据节点的平台选择正确的镜像。
可以使用 Buildx
和 Dockerfiles
支持三种不同策略构建多平台镜像:
在内核中使用 QEMU 仿真支持
使用相同的bulder实例在多个原生节点构建
使用Dockerfile中的阶段交叉编译到不同的体系结构
备注
这里实践需要参考 BuildKit快速起步 进行
Docker官方多平台镜像(Docker Official Images Architectures other than amd64)¶
官方镜像的Dockerfile格式使用类似如下: