跳到主要内容

创建和管理清单列表及镜像索引

摘要

podman manifest 命令提供了一组子命令,可用于:

  • 创建工作的 Docker 清单列表或 OCI 镜像索引。

子命令

命令手册页描述
addpodman-manifest-add(1)将一个镜像或制品添加到清单列表或镜像索引中。
annotatepodman-manifest-annotate(1)在清单列表或镜像索引中添加和更新关于镜像或制品的信息。
createpodman-manifest-create(1)创建清单列表或镜像索引。
existspodman-manifest-exists(1)检查本地存储中是否存在给定的清单列表。
inspectpodman-manifest-inspect(1)显示清单列表或镜像索引。
pushpodman-manifest-push(1)将清单列表或镜像索引推送到注册表。
removepodman-manifest-remove(1)从清单列表或镜像索引中移除一个镜像。
rmpodman-manifest-rm(1)从本地存储中移除清单列表或镜像索引。

请注意,以上子命令的具体用法和选项可能因 Podman 版本的不同而有所差异。建议查阅与您的 Podman 版本相对应的官方文档以获取最准确的信息。

示例

从 Containerfile 构建多架构清单列表

假设 Containerfile 使用 RUN 指令,主机需要有一种执行非本机二进制文件的方法。配置这超出了本示例的范围。使用 4 个线程并行构建名为 shazam 的多架构清单列表可以这样做:

$ platarch=linux/amd64,linux/ppc64le,linux/arm64,linux/s390x
$ podman build --jobs=4 --platform=$platarch --manifest shazam .

注意: --jobs 参数是可选的。在构建多架构清单列表时,不要使用 podman build 命令的 --tag(或 -t)选项。

从单独构建的镜像中组装多架构清单

假设 example.com/example/shazam:$arch 镜像已在其他主机上单独构建并推送到 example.com 注册表。它们可以被组合成一个清单列表,并使用一个简单的循环进行推送:

$ REPO=example.com/example/shazam
$ podman manifest create $REPO:latest
$ for IMGTAG in amd64 s390x ppc64le arm64; do \
podman manifest add $REPO:latest docker://$REPO:$IMGTAG; \
done
$ podman manifest push --all $REPO:latest此外,`--all` 推送选项是必需的,以确保推送所有内容,而不仅仅是本机平台/架构。

### 在推送之前移除和标记清单列表

与仅移除和推送内容相比,移除和推送清单列表时需要特别注意。几乎总是需要使用 `manifest rm``manifest push --all` 子命令。例如,重命名和推送可以这样进行:

```bash
$ podman tag localhost/shazam example.com/example/shazam
$ podman manifest rm localhost/shazam
$ podman manifest push --all example.com/example/shazam

在这个示例中,我们首先使用 podman tag 命令给清单列表一个新的标签,然后使用 podman manifest rm 移除本地存储中的旧清单列表。最后,使用 podman manifest push --all 推送新的清单列表及其所有关联的镜像到远程注册表。这样确保了推送包含了所有架构的镜像,而不仅仅是本机平台/架构的镜像。

另请参阅

这些手册页提供了关于如何使用 Podman 来管理多架构清单列表的详细信息和示例。如果你需要了解 Podman 的其他功能或命令,请查阅相应的手册页。