创建 docker 多平台镜像

创建多平台镜像的方法分为两种

1、在不同平台分别创建并推送镜像到 Docker Hub,然后通过 docker manifest 将多个平台镜像合并
2、通过 docker buildx 在一台机器上创建并推送多个平台的镜像

一、使用 docker manifest

假设 Docker Hub 上已经存在多个平台的镜像标签(username/nginx:1.21-amd64username/nginx:1.21-arm64

1、合并

1
2
3
docker manifest create username/nginx:1.21 \
--amend username/nginx:1.21-amd64 \
--amend username/nginx:1.21-arm64

2、推送

1
docker manifest push username/nginx:1.21

3、检查
合并且推送完成后,到 Docker Hub 上查看 nginx:1.21 标签已经包含多个平台架构

1
2
# 展示镜像的元数据,包括支持的平台架构信息
docker manifest inspect username/nginx:1.21

二、使用 docker buildx

docker buildx 是官方提供的一个插件,支持创建多平台 docker 镜像

1
2
3
4
# 查看 docker buildx 版本
docker buildx version
# 如果没有则安装
apt install -y docker-buildx-plugin

1、查看构建器列表

1
2
#默认已经运行 docker 驱动的构建器,但不支持多平台构建
docker buildx ls

2、创建新的构建器,支持多平台构建(docker-container 驱动)

1
2
3
4
# 创建名称为 diybuilder 的构建器并启动
docker buildx create --name diybuilder --use --bootstrap
# 检查构建器
docker buildx inspect

3、创建并推送镜像

1
docker buildx build --platform linux/amd64,linux/arm64 -t username/nginx:1.21 --push .

4、检查

1
2
3
4
# 展示镜像的元数据,包括支持的平台架构信息
docker buildx imagetools inspect username/nginx:1.21
# 或者使用 manifest 查看
docker manifest inspect username/nginx:1.21

最后在不同平台创建容器,并查看容器架构

1
2
# 返回容器的架构 x86_64 或 aarch64
docker run --rm username/nginx:1.21 sh -c 'arch'