构建本地镜像时会默认使用本地CPU架构进行打包,例如使用传统CPU平台构建时会生成 X86 & X64 架构的镜像文件,而使用 Apple M1 打包镜像会生成 ARM 架构的镜像文件
如果 ARM 版镜像文件上传到私有仓库后又被 X86 平台电脑获取到,X86 平台将无法正常运行改镜像,因此在构建本地镜像时需要进行多架构支持,使得生成镜像可以在不同平台上运行
安装:
使用 buildx 来实现多架构支持,Docker Desktop 自带 buildx 命令,但是 Linux 环境下的 Docker 在 19.0.3 之前没有内置 buildx,需要自行安装,安装方式参考官方文档
查看安装版本:
docker buildx version
操作命令:
查看当前架构环境:
docker buildx ls
创建新环境:
默认的builder实例不支持同时指定多个 —platform,所以必须先创建一个新的环境实例
docker buildx create --name 环境名
使用环境:
指定 buildx 需要使用的环境
docker buildx use 环境名
指定架构版本:
在使用 Dockerfile 文件构建时指定需要生成的架构版本,常用架构如下:
- linux/arm/v5
- linux/arm/v7
- linux/arm64/v8
- linux/amd64
- linux/s390x
- linux/386
还可以指定生成的镜像保存到本地或者推送到仓库,具体参考案例演示
docker buildx build --platform 架构版本 -t 镜像名:版本号 .
案例演示:
Dockerfile:
FROM python:3-slim
WORKDIR /src
EXPOSE 5000
操作命令:
生成的镜像可以推送到仓库,或者保存到本地,具体参数如下:
- **--load **为保存到本地(不支持多 --platform 参数)
- **--push** 为推送到仓库(需要先进行 docker login 登录,且只能推送到 docker hub 上)
docker buildx build --platform linux/arm/v7 -t mypython:9.0 . --load