构建多平台镜像的方法分为两种:一种是在不同平台的机器上分别构建并推送对应平台的镜像,然后通过 Docker Manifest 将两个镜像标签合并为一个。另一种是通过 Docker buildx 在一台机器上构建并推送两个平台的镜像。

使用 Manifest 工具

此方法需要你先在对应架构的机器上分别构建和推送对应架构的镜像标签(例如:tag-amd64tag-arm64),然后使用 docker manifest 合并这些镜像。

使用 docker manifest 命令手动创建和维护多架构镜像列表:

# 创建和维护清单文件
docker manifest create username/repository:tag \
--amend username/repository:tag-amd64 \
--amend username/repository:tag-arm64 # 推送 multi-architecture 镜像
docker manifest push username/repository:tag

检查镜像

创建并推送完成后,你可以到 Docker Hub 上检查镜像是否正确标记了多个架构。

docker manifest inspect username/repository:tag

这个命令将展示镜像的元数据,包括它支持的架构。

使用 Docker buildx

Docker buildx 是 Docker 官方提供的一个插件,支持构建多平台镜像。你可以使用以下步骤创建一个支持多架构的镜像:

  1. 创建并启动builder实例:

    首先,确保你的 Docker 版本是最新的,并且已经开启了实验性功能(experimental features)。可以通过修改 Docker 的配置文件或设置环境变量 DOCKER_CLI_EXPERIMENTAL=enabled 来启用。

    export DOCKER_CLI_EXPERIMENTAL=enabled

    如果你还没有创建过 buildx builder 实例,需要首先创建一个:

    docker buildx create --name mybuilder --use  # 创建构建器
    docker buildx inspect --bootstrap # 检查并启动构建器
  2. 构建和推送镜像:

    buildx 支持直接构建并推送多架构的镜像。例如,你可以在 arm64 机器上运行类似以下命令:

    # 使用 buildx 构建并推送镜像到 Docker Hub(或其他容器仓库)
    docker buildx build --platform linux/amd64,linux/arm64 -t username/repository:tag --push .

    这个命令会同时为 amd64 和 arm64 平台构建镜像,并将它们推送到指定的仓库和标签。

    构建的多平台镜像必须使用 --push 选项推送

验证镜像架构

构建并推送后,你可以使用以下命令查看镜像支持的架构:

docker buildx imagetools inspect username/repository:tag

这将展示镜像标签下支持的所有架构。

Docker 构建多平台镜像的更多相关文章

  1. Docker Buildx使用教程:使用Buildx构建多平台镜像

    写在前边 记录一下前阵子在X86_64平台使用Docker Buildx构建多平台镜像的办法,包含但不限于构建ARM镜像. 构建环境 软件名 版本 Ubuntu 18.04.2 LTS Docker ...

  2. 使用Docker构建jdk1.8镜像

    一.下载centos镜像 下载自己需要的版本TAG,详见: docker安装指定版本TAG的镜像 $ sudo docker pull centos:centos7 二.下载jdk1.8,并上传到/u ...

  3. docker: 构建自己的镜像

    我们给予ubuntu的镜像然后拷贝python的requirement.txt文件进去,再根据这个文件安装对应的python库 拷贝文件到docker容器.首先查找对应的容器ID.然后执行命令 doc ...

  4. Docker构建一个node镜像

    0. 设置国内docker镜像源 进入Settings->Daemon->Advanced,添加如下配置. { "registry-mirrors": [ " ...

  5. docker构建一个简易镜像

    一 下载centos镜像 docker pull centos 二 启动镜像 [root@Centos-node3 ~]# docker run -it --name my_ng centos bas ...

  6. 使用Docker构建基于centos7镜像的python环境

    Dcokerfile配置信息 ############################################## # 基于centos7构建python3运行环境 # 构建命令: 在Dock ...

  7. 使用 buildx 构建多平台 Docker 镜像

    原文链接:使用 buildx 构建多平台 Docker 镜像 在工作和生活中,我们可能经常需要将某个程序跑在不同的 CPU 架构上,比如让某些不可描述的软件运行在树莓派或嵌入式路由器设备上.特别是 D ...

  8. DevOps实践之一:基于Docker构建企业Jenkins CI平台

    基于Docker构建企业Jenkins CI平台 一.什么是CI 持续集成(Continuous integration)是一种软件开发实践,每次集成都通过自动化的构建(包括编译,发布,自动化测试)来 ...

  9. docker:Dockerfile构建LNMP平台

    docker:Dockerfile构建LNMP平台   1.dockerfile介绍  Dockerfile是Docker用来构建镜像的文本文件,包含自定义的指令和格式.可以通过docker buil ...

  10. 视频私有云实战:基于Docker构建点播私有云平台

    私有云是为一个客户单独使用而构建的,因而提供对数据.安全性和服务质量的最有效控制.前置条件是客户拥有基础设施,并可以使用基础设施在其上部署应用程序.其核心属性是专有的资源.本篇文章将会结合网易云信的实 ...

随机推荐

  1. 【论文阅读】VDBFusion: Flexible and Efficient TSDF Integration of Range Sensor Data

    Type: Sensors Year: 2022 tag: Mapping 组织: Bonn 参考与前言 论文链接:https://www.ncbi.nlm.nih.gov/pmc/articles/ ...

  2. GUI测试稳定性的关键技术

    标签(空格分隔): GUI测试稳定性 GUI测试稳定性的关键技术 GUI 自动化测试稳定性,最典型的表现形式就是,同样的测试用例在同样的环境上,时而测试通过,时而测试失败. 这也是影响 GUI 测试健 ...

  3. Sql Server 创建用户并限制权限

    创建登录名 使用sa或者Windows身份验证登录,[安全性]-[登录名],右键[新建登录名] 设置登录名属性 设置数据库权限 db owner --拥有数据库全部权限,包括删除数据库权限 db ac ...

  4. ChatGPT学习之旅 (8) 单元测试助手

    大家好,我是Edison. 本篇我们基于上一篇的基础,来写一个单元测试助手的prompt,让它帮我们写一些我们.NET开发者不太愿意编写的单元测试代码,进而提高我们的代码质量,同时还降低我们的开发工作 ...

  5. Java中字符串去除空格

    1. str.trim(); 去掉首尾空格 2. str.replace(" ", ""); 去掉所有空格,包括首尾.中间 String str = " ...

  6. 解决方案 | Claunch 如何更新配置文件

    1.问题 比如我的电脑上有Claunch 3.26版本(绿色版本),但是更新的时候如何保证我的新版本的图标.链接也更新是个问题. 官网说得比较模糊: 2.解决方法 打开复制data数据覆盖到新版本同样 ...

  7. MySQL预处理语句PREPARE、EXECUTE、DEALLOCATE使用大全

    说明 MySQL官方将PREPARE.EXECUTE.DEALLOCATE统称为PREPARE STATEMENT,我习惯称其为[预处理语句]. 其语法为: PREPARE stmt_name FRO ...

  8. 格式输出函数printf()详解_C语言

    printf函数称为格式输出函数,其关键字最末一个字母f即为"格式"(format)之意.其功能是按用户指定的格式,把指定的数据显示到显示器屏幕上. printf函数调用的一般形式 ...

  9. 2024-07-24:用go语言,给定一个整数数组 nums,其中至少包含两个元素。 可以根据以下规则执行操作:选择最前面两个元素删除、选择最后两个元素删除,或选择第一个和最后一个元素删除。 每次操作

    2024-07-24:用go语言,给定一个整数数组 nums,其中至少包含两个元素. 可以根据以下规则执行操作:选择最前面两个元素删除.选择最后两个元素删除,或选择第一个和最后一个元素删除. 每次操作 ...

  10. nats 简介和使用

    nats 简介和使用 nats 有 3 个产品 core-nats: 不做持久化的及时信息传输系统 nats-streaming: 基于 nats 的持久化消息队列(已弃用) nats-jetstre ...