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

一.manifest的概述

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

manifest具备以下优点:

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

二.BuildX的概述

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

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

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

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

实际应用
cpp 复制代码
# 启用 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 .

三.实际应用例子

在实际应用中,buildxmanifest 通常结合使用:

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

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

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

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

cpp 复制代码
docker buildx build -t myapp:x86 -f Dockerfile.x86 .
docker push myapp:x86

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

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

cpp 复制代码
docker manifest create myapp:v1 myapp:x86 myapp:arm

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

cpp 复制代码
docker manifest inspect myapp:v1

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

cpp 复制代码
docker manifest annotate myapp:v1 myapp:x86 --os linux --arch amd64
docker manifest annotate myapp:v1 myapp:arm --os linux --arch arm64
相关推荐
上天_去_做颗惺星 EVE_BLUE17 分钟前
Docker高效使用指南:从基础到实战模板
开发语言·ubuntu·docker·容器·mac·虚拟环境
小程故事多_8032 分钟前
深度搜索Agent架构全解析:从入门到进阶,解锁复杂问题求解密码
人工智能·架构·aigc
●VON2 小时前
React Native for OpenHarmony:项目目录结构与跨平台构建流程详解
javascript·学习·react native·react.js·架构·跨平台·von
Gary董2 小时前
高并发的微服务架构如何设计
微服务·云原生·架构
好好沉淀2 小时前
Docker开发笔记(详解)
运维·docker·容器
ujainu2 小时前
Flutter + OpenHarmony 实战:《圆环跳跃》——完整游戏架构与视觉优化
flutter·游戏·架构·openharmony
爬山算法3 小时前
Hibernate(74)如何在CQRS架构中使用Hibernate?
java·架构·hibernate
禅口魔心3 小时前
Win10 + WSL2 + Docker:K510(DongshanPI-Vision)开发环境从踩坑到跑通全记录(交叉编译 + 上板运行)
docker·嵌入式开发·wsl2·k510
Ankie Wan3 小时前
cgroup(Control Group)是 Linux 内核提供的一种机制,用来“控制、限制、隔离、统计”进程对系统资源的使用。
linux·容器·cgroup·lxc
香芋Yu3 小时前
【大模型教程——第二部分:Transformer架构揭秘】第2章:模型家族谱系:从编码器到解码器 (Model Architectures)
深度学习·架构·transformer