Docker 构建多平台镜像的多种方法

 更新时间:2026年05月28日 15:37:15   作者:cadecode  
本文介绍 Docker 构建多平台镜像的方式,包括镜像与平台的关系介绍、利用 manifest 合并镜像,及使用 buildx 打包多平台镜像的方法,下面就来详细的介绍一下

镜像与多平台

一般情况下,使用镜像时必须保证镜像与 Docker 宿主机系统架构一致,同理,通过 docker build 构建的镜像只能运行在相应平台上

想要满足多平台的镜像需求,就得在不同平台上打包,推送多个版本到仓库,使用时根据平台选择 pull 哪个

docker pull username/my-image:1.0.0--amd64

引出问题:

  • 各平台的镜像版本号混乱,选用麻烦
  • 打包多个平台的镜像,需要多平台环境支持

docker manifest

docker manifest 命令用于为镜像创建一个 manifest 列表,manifest 列表中会记录该镜像对应的各平台真实镜像的相关信息,相当于将多个平台的镜像合为一份,通过 manifest 来区分平台

在向 Docker Hub 推送镜像时会自动生成 manifest,在拉取镜像时,会自动根据 manifest 检索镜像

创建 manifest

docker manifest create username/my-image:1.0.0 \
      username/my-image:1.0.0--amd64 \
      username/my-image:1.0.0--arm64
# --amend: 在已有 manifest 上追加

修改 manifest

docker manifest annotate username/my-image:1.0.0 \
      username/my-image:1.0.0--amd64 \
      --os linux --arch amd64

查看 manifest

docker manifest inspect username/my-image:1.0.0

推送 manifest

docker manifest push username/my-image:1.0.0

buildx

buildx 是一个 docker 插件,基于 BuildKit 引擎,提供了不同于 docker build 的更多功能。buildx 的一个关键特性是可以为不同的硬件架构构建并输出镜像,也就是说,可以在 amd64 的机器上构建 arm64 架构的镜像

docker buildx 命令需要 docker 版本 19.03+

docker --version
docker buildx version

启用实验性功能,编辑 /etc/docker/daemon.json

{
  "experimental": true
}

安装 binfmtbinfmt 集合了一系列跨平台的模拟器

docker run --rm --privileged tonistiigi/binfmt:latest --install all

创建 buildx 构建器并切换使用

docker buildx create --name mybuilder --driver docker-container
docker buildx use mybuilder

执行 buildx build

docker buildx build --platform linux/arm64  -t username/my-image:1.0.0--arm64 --load .
docker buildx build --platform linux/amd64  -t username/my-image:1.0.0--amd64 --load .

对打包出的镜像测试无误后,可以推送 Docker Hhub,在配合 docker manifect 合并镜像名称

也可以一次打包多个平台,但打包结果在 buildx 构建缓存中,无法在本地查看,需要直接推送到 Docker Hub

docker buildx build --platform linux/amd64,linux/arm64  -t username/my-image:1.0.0 --push .

到此这篇关于Docker 构建多平台镜像的多种方法的文章就介绍到这了,更多相关Docker 构建多平台镜像内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Docker容器添加映射端口的两种实现方法

    Docker容器添加映射端口的两种实现方法

    本文主要介绍了Docker容器添加映射端口的两种实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • docker desktop搜索不到images问题的解决办法

    docker desktop搜索不到images问题的解决办法

    这篇文章主要给大家介绍了关于docker desktop搜索不到images问题的解决办法,主要包括检查网络连接、Docker配置、清理缓存和使用其他镜像源,通过这些方法,用户可以解决在实际应用中搜索不到Images的问题,需要的朋友可以参考下
    2025-03-03
  • 使用ssh连接docker服务器的方法

    使用ssh连接docker服务器的方法

    这篇文章主要介绍了使用ssh连接docker服务器的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • mysql8.x docker远程访问配置详解

    mysql8.x docker远程访问配置详解

    本文主要介绍了mysql8.x docker远程访问配置,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • IDEA集成docker部署springboot项目的全过程

    IDEA集成docker部署springboot项目的全过程

    这篇文章主要介绍了IDEA集成docker部署springboot项目,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • Docker中容器数据卷详解

    Docker中容器数据卷详解

    这篇文章主要介绍了Docker中容器数据卷详解的相关资料,需要的朋友可以参考下
    2022-11-11
  • Docker自定义镜像输出日志的问题小结

    Docker自定义镜像输出日志的问题小结

    本文主要解决Docker自定义镜像之后,通过docker logs命令查看不到相关日志的问题,下面给大家分享几种方法,感兴趣的朋友一起看看吧
    2025-05-05
  • docker容器里面的root权限获取方法

    docker容器里面的root权限获取方法

    这篇文章主要介绍了docker容器里面的root权限获取方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • docker vllm开机启动方式

    docker vllm开机启动方式

    文章内容是关于vllm启动大模型的个人经验总结,主要涉及启动脚本中的interval参数设置,以及重启验证的步骤,建议大家参考并支持脚本之家
    2026-05-05
  • Docker Desktop常见的几种启动失败问题解决方法

    Docker Desktop常见的几种启动失败问题解决方法

    使用Docker Desktop 可以很方便的启用 Kubernetes,下面这篇文章主要给大家介绍了关于Docker Desktop常见的几种启动失败问题解决方法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09

最新评论