莱莱 发表于 2022-11-28 13:06:05

如何保存/同步多架构容器 Docker 镜像

前言

随着容器、芯片技术的进一步发展,以及绿色、节能、信创等方面的要求,多 CPU 架构的场景越来越常见。典型的应用场景包括:

[*]信创:x86 服务器 + 鲲鹏 ARM 等信创服务器;
[*]个人电脑:苹果 Mac M1 + Windows 电脑(或旧的 Intel 芯片苹果电脑);
[*]Edge:数据中心使用 x86 服务器,边缘 Edge 端使用低功耗的 arm 边缘设备(如树莓派等)。
容器云原生技术在这方面支持的是很好,但是实际使用中细节会有一些问题,举一个例子,就是:如何保存/同步多架构容器 Docker 镜像
本次先以将 Docker Hub 的镜像同步到本地镜像仓库为例说明。
词汇表

英文中文说明multi-arch image多架构镜像variant变体不同变体指的如:redis 镜像的 arm/v5 和 arm/v7 两种变体manifest清单manifest-list清单(的)列表layer(镜像)层image index镜像索引OCI 专有名词,含义和 manifest-list 相同manifest digest清单摘要容器镜像如何支持多架构

一个多架构镜像(A multi-arch image)是一种容器镜像,它可以组合不同架构体系(如 amd64 和 arm)的变体(variants),有时还可以组合不同操作系统(如 windows 和 linux)的变体。运行支持多架构的镜像时,容器客户端会自动选择与你的 OS 和架构相匹配的镜像变体。
多架构镜像是基于镜像清单和清单列表实现的。
清单(Manifests)

每个容器镜像都由一个“清单”表示。清单是一个 JSON 文件,用于唯一标识镜像,并引用其层(layer)及其相应的大小。
hello-world Linux 镜像的基本清单类似于以下内容:
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"config": {
      "mediaType": "application/vnd.docker.container.image.v1+json",
      "size": 1510,
      "digest": "sha256:fbf289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e"
    },
"layers": [
      {
      "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
      "size": 977,
      "digest": "sha256:2c930d010525941c1d56ec53b97bd057a67ae1865eebf042686d2a2d18271ced"
      }
    ]
}清单列表 (Manifest-lists)

多架构镜像的清单列表(通常称为 OCI 镜像 的镜像索引)是镜像的集合(索引),您可以通过指定一个或多个镜像名称来创建一个。它包括有关每个镜像的详细信息,例如支持的操作系统和体系架构、大小和清单摘要 (manifest digest)。清单列表的使用方式与 docker pull 和 docker run 命令 中的镜像名称相同。
docker CLI 使用docker manifest命令管理清单和清单列表。
<blockquote>

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 如何保存/同步多架构容器 Docker 镜像