简介
在这个实验中,你将学习如何管理 Docker 清单列表(manifest list),这对于创建多架构镜像至关重要。我们将介绍通过合并不同平台的镜像来创建清单列表的过程,使用 docker manifest inspect
命令验证其是否存在,最后演示如何使用 docker manifest rm
命令删除清单列表。这个实践练习将让你在 Docker 工作流程中获得处理清单列表的实际经验。
在这个实验中,你将学习如何管理 Docker 清单列表(manifest list),这对于创建多架构镜像至关重要。我们将介绍通过合并不同平台的镜像来创建清单列表的过程,使用 docker manifest inspect
命令验证其是否存在,最后演示如何使用 docker manifest rm
命令删除清单列表。这个实践练习将让你在 Docker 工作流程中获得处理清单列表的实际经验。
在这一步中,你将学习如何在 Docker 中创建清单列表(manifest list)。清单列表是一个镜像清单(image manifest)的列表,它允许你使用单个镜像名称来引用不同架构和操作系统的镜像。这对于构建多架构镜像特别有用。
首先,让我们拉取两个不同的镜像,用于创建清单列表。我们将使用 amd64
和 arm64
架构的 alpine
镜像。
docker pull alpine:latest
docker pull --platform arm64 alpine:latest
第一条命令会为你当前的架构(可能是 amd64
)拉取 alpine:latest
镜像。第二条命令则会明确为 arm64
架构拉取 alpine:latest
镜像。
现在,你可以使用 docker manifest create
命令来创建清单列表。其语法为 docker manifest create TARGET_IMAGE SOURCE_IMAGE [SOURCE_IMAGE...]
。我们将创建一个名为 my-alpine:latest
的清单列表,其中包含 amd64
和 arm64
架构的 alpine:latest
镜像。
docker manifest create my-alpine:latest alpine:latest alpine:latest --amend alpine:latest --platform arm64
在这个命令中:
my-alpine:latest
是你要创建的新清单列表的名称。alpine:latest
是第一个源镜像(针对默认架构)。--amend alpine:latest --platform arm64
将 arm64
平台的 alpine:latest
镜像添加到清单列表中。运行此命令后,你已经在本地创建了一个清单列表。不过,它尚未推送到镜像仓库(registry)。我们将在后续步骤中进行推送。
在上一步中,我们创建了一个名为 my-alpine:latest
的清单列表(manifest list)。现在,我们将验证这个清单列表是否已成功创建并存在于本地。
你可以使用 docker manifest inspect
命令来查看清单列表的详细信息。如果清单列表存在,该命令将以 JSON 格式输出其内容。
docker manifest inspect my-alpine:latest
如果 my-alpine:latest
清单列表已成功创建,你将看到一个描述该清单列表的 JSON 输出,其中包括它为不同架构引用的不同镜像。如果清单列表不存在,该命令将返回错误。
输出将显示有关清单列表的信息,例如架构版本(schema version)、媒体类型(media type)以及包含的每个架构的清单列表。你应该会看到 amd64
和 arm64
架构的条目,这证实了清单列表已正确创建,并引用了这些平台的镜像。
在前面的步骤中,我们创建并验证了名为 my-alpine:latest
的清单列表(manifest list)的存在。现在,我们将学习如何删除这个清单列表。
要删除清单列表,你可以使用 docker manifest rm
命令,后面跟上清单列表的名称。
docker manifest rm my-alpine:latest
此命令将删除对 my-alpine:latest
清单列表的本地引用。请注意,该命令仅删除清单列表本身,而不会删除清单列表所引用的各个镜像。我们之前拉取的 amd64
和 arm64
架构的 alpine:latest
镜像仍将保留在你的系统中。
执行该命令后,你应该会看到表明清单列表已被取消标签(untagged)的输出。
在上一步中,我们删除了名为 my-alpine:latest
的清单列表(manifest list)。现在,我们将验证该清单列表是否已成功删除,并且不再存在于本地。
你可以再次使用 docker manifest inspect
命令来尝试检查该清单列表。如果清单列表已成功删除,此命令应返回一条错误信息,表明未找到该清单列表。
docker manifest inspect my-alpine:latest
在删除清单列表后运行此命令,你应该会看到类似于 no such manifest: docker.io/library/my-alpine:latest
的错误消息。这证实了该清单列表已从你的本地 Docker 环境中移除。
在本次实验(Lab)中,我们学习了如何创建和管理 Docker 清单列表(manifest list)。首先,我们拉取了不同架构的镜像,然后使用 docker manifest create
命令将它们合并为一个清单列表,展示了如何构建多架构镜像。
创建完成后,我们使用 docker manifest inspect
命令验证了清单列表的存在。最后,我们学习了如何使用 docker manifest rm
命令删除清单列表,并确认其已被移除,涵盖了 Docker 中清单列表的基本生命周期管理。