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

2022-12-01 16:08:16 浏览数 (1)

前言

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

1.信创:x86 服务器 鲲鹏 ARM 等信创服务器;2.个人电脑:苹果 Mac M1 Windows 电脑(或旧的 Intel 芯片苹果电脑);3.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 镜像的基本清单类似于以下内容:

代码语言:javascript复制
{
  "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 镜像 的镜像索引[1])是镜像的集合(索引),您可以通过指定一个或多个镜像名称来创建一个。它包括有关每个镜像的详细信息,例如支持的操作系统和体系架构、大小和清单摘要 (manifest digest)。清单列表的使用方式与 docker pulldocker run 命令 中的镜像名称相同。

docker[2] CLI 使用 docker manifest命令管理清单和清单列表。

0 人点赞