构建本地镜像时会默认使用本地CPU架构进行打包,例如使用传统CPU平台构建时会生成 X86 & X64 架构的镜像文件,而使用 Apple M1 打包镜像会生成 ARM 架构的镜像文件
如果 ARM 版镜像文件上传到私有仓库后又被 X86 平台电脑获取到,X86 平台将无法正常运行改镜像,因此在构建本地镜像时需要进行多架构支持,使得生成镜像可以在不同平台上运行
image.png

安装:

使用 buildx 来实现多架构支持,Docker Desktop 自带 buildx 命令,但是 Linux 环境下的 Docker 在 19.0.3 之前没有内置 buildx,需要自行安装,安装方式参考官方文档

查看安装版本:

  1. docker buildx version

image.png


操作命令:

查看当前架构环境:

  1. docker buildx ls

image.png

创建新环境:

默认的builder实例不支持同时指定多个 —platform,所以必须先创建一个新的环境实例

  1. docker buildx create --name 环境名

image.png

使用环境:

指定 buildx 需要使用的环境

  1. docker buildx use 环境名

指定架构版本:

在使用 Dockerfile 文件构建时指定需要生成的架构版本,常用架构如下:

  • linux/arm/v5
  • linux/arm/v7
  • linux/arm64/v8
  • linux/amd64
  • linux/s390x
  • linux/386

还可以指定生成的镜像保存到本地或者推送到仓库,具体参考案例演示

  1. docker buildx build --platform 架构版本 -t 镜像名:版本号 .

案例演示:

构建一个 ARM V7 平台能使用的镜像并保存到本地

Dockerfile:

  1. FROM python:3-slim
  2. WORKDIR /src
  3. EXPOSE 5000

操作命令:

生成的镜像可以推送到仓库,或者保存到本地,具体参数如下:

  1. - **--load **为保存到本地(不支持多 --platform 参数)
  2. - **--push** 为推送到仓库(需要先进行 docker login 登录,且只能推送到 docker hub 上)
  1. docker buildx build --platform linux/arm/v7 -t mypython:9.0 . --load

image.png