【Docker】 Manifest与Buildx:多架构镜像管理的解析与实践

server/2025/2/8 11:38:30/

一.manifest的概述

         manifest包含了镜像的层、标签、作者等关键信息,并支持多架构镜像的管理。通过Manifest List,开发者能够为同一应用提供适用于不同架构的镜像,从而确保其在各类平台上的兼容性。实际上是把不同操作系统和架构打包成独立的一个镜像,用户拉去镜像时根据用户的实际使用场景自动选择合适的架构镜像。manifest本身不能直接用于打包镜像,只是用于创建和管理包含多个不同镜像的清单列表(manifestlist),构建多架构镜像使用buildx技术进行。

manifest具备以下优点:

  • 架构支持:Manifest List允许开发者为同一应用程序提供不同架构的镜像,提高了镜像的跨平台兼容性。
  • 信息丰富:Manifest包含了镜像的详细信息,如操作系统、架构、大小等,有助于用户了解镜像的兼容性和运行环境。
  • 优化存储:通过层的复用和共享,Manifest有助于减少存储占用,降低镜像大小。
  • 版本管理:开发者可以使用标签和摘要来方便地管理和切换不同版本的镜像,确保生产环境的稳定性。

二.BuildX的概述

  buildx 是 Docker 的一个扩展工具,用于增强镜像构建功能,支持多平台构建和更高效的构建缓存管理。

作用:
  • 多平台构建:可以在一次构建中生成支持多种 CPU 架构的镜像(如 linux/amd64linux/arm64 等)。

  • 高效的缓存管理:支持分布式缓存,可以加速构建过程。

  • 构建器实例管理:可以创建和管理多个构建器实例,支持不同的构建后端(如 Docker、Kubernetes 等)。

实际应用
# 启用 buildx
docker buildx create --use# 构建多架构镜像
docker buildx build --platform linux/amd64,linux/arm64 -t my-image:latest .# 推送多架构镜像到 Docker Hub
docker buildx build --platform linux/amd64,linux/arm64 -t my-image:latest --push .

三.实际应用例子

        在实际应用中,buildx 和 manifest 通常结合使用:

  • 使用 buildx 构建多平台镜像。

  • 使用 manifest 将这些镜像合并为一个多架构镜像。

         PS:使用manifest需要docker处于17.06版本以上。

         首先,我们需要将程序打包成不同平台的镜像(使用buildx技术),再为不同平台的镜像贴上对应的标签(标明这个镜像是什么平台的):

docker buildx build -t myapp:x86 -f Dockerfile.x86 .
docker push myapp:x86docker buildx build -t myapp:arm -f Dockerfile.arm .
docker push myapp:arm

        其次,使用CLI命令创建manifest文件,将所有平台的镜像关联在一起:

docker manifest create myapp:v1 myapp:x86 myapp:arm

        PS:使用Docker CLI命令查看Manifest文件的详细信息:

docker manifest inspect myapp:v1

        为Manifest添加相关的操作系统和架构等注解信息:

docker manifest annotate myapp:v1 myapp:x86 --os linux --arch amd64
docker manifest annotate myapp:v1 myapp:arm --os linux --arch arm64


http://www.ppmy.cn/server/165941.html

相关文章

组学数据分析实操系列 | (二)一键实现MaxQuant非标定量蛋白质组学搜库结果的生信分析

前言 上一篇我们介绍了如何通过MaxQuant软件对非标定量蛋白质组学原始数据进行分析得到搜库结果,下一步该怎么做呢?今天和大家分享一个非常实用的工具——LFQ-Analyst。该工具由蒙纳士大学的组学和生信平台开发,是一个交互式Web应用程序&…

I.MX6ULL 中断介绍下

GIC重点寄存器 1.中断分发器寄存器(Distributor register ) a.Distributor Control Register(中断分发控制寄存器), GICD_CTLR Purpose Enables the forwarding of pending interrupts from the Distributor to the CPU interfaces 使能将挂起的中断从…

高端入门:Ollama 本地高效部署DeepSeek模型深度搜索解决方案

目录 一、Ollama 介绍 二、Ollama下载 2.1 官网下载 2.2 GitHub下载 三、模型库 四、Ollmal 使用 4.1 模型运行(下载) 4.2 模型提问 五、Ollama 常用命令 相关推荐 一、Ollama 介绍 Ollama是一个专为在本地机器上便捷部署和运行大型语言模型&…

深度探索未来的搜索引擎 —— DeepSeek

随着信息时代的进步,我们每天都在生成、分享和消费大量的数据,如何从海量的内容中迅速找到有价值的信息,成为了现代社会的重要课题。传统的搜索引擎虽然在很长时间内引领了互联网的发展,但随着技术的进步和用户需求的变化&#xf…

Flutter List 的 every 如果回调函数抛出异常 应该如何处理

在使用 List 的 every 方法时,如果回调函数抛出异常,可以通过以下几种方式进行处理: 1. 在回调函数内部捕获异常 在回调函数内部使用 try-catch 语句捕获可能抛出的异常,并根据具体情况进行处理。这样可以避免异常直接导致 ever…

git撤销上一次的提交

1、撤销提交 如果需要撤销上一次的提交,只是提交到了本地,可以通过命令: // 撤销最近的提交(保留修改) git reset --soft HEAD~1 这个操作可以保留之前的提交和当前的修改。最近一次的提交到本地的修改的提交会回到…

机试题——DNS本地缓存

题目描述 正在开发一个DNS本地缓存系统。在互联网中,DNS(Domain Name System)用于将域名(例如www.example.com)解析为IP地址,以便将请求发送到正确的服务器上。通常情况下,DNS请求会发送到互联…

C++ Primer 递增和递减运算符

欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…