介绍
在这个实验中,你将学习如何使用 docker scout stream 命令管理镜像流(stream)。镜像流本质上是镜像的集合,了解如何与它们进行交互对于有效组织和管理你的 Docker 镜像至关重要。
你将首先学习如何列出现有的镜像流,以查看有哪些镜像集合可用。然后,你将探索如何列出特定镜像流中包含的具体镜像。最后,你将学习如何将一个镜像记录到特定平台的镜像流中,从而使你能够将镜像与其各自的镜像流和平台关联起来。
列出现有的镜像流
在这一步中,你将学习如何列出 Docker 中现有的镜像流(stream)。镜像流本质上是镜像的仓库或集合。列出镜像流可以帮助你了解有哪些镜像集合可供使用。
首先,让我们使用 docker images 命令列出所有可用的镜像。这个命令会显示当前系统中已下载的镜像。
docker images
你应该会看到类似以下的输出,不过具体的镜像会根据你拉取的内容而有所不同:
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest d621e9f15c2f 2 weeks ago 72.8MB
hello-world latest d2c94e258dcb 2 months ago 13.3kB
输出中的 REPOSITORY 列代表镜像流的名称。TAG 列代表该镜像流中的特定版本。
若要仅列出唯一的镜像流名称(仓库名),你可以对 docker images 的输出进行处理。我们可以使用 awk 和 sort 等命令行工具来实现这一点。
docker images | awk '{print $1}' | sort -u
让我们来拆解这个命令:
docker images:此命令用于列出所有镜像。|:这是一个管道符号,它将左边命令的输出作为输入传递给右边的命令。awk '{print $1}':awk是一个强大的文本处理工具。{print $1}告诉awk打印输入每行的第一列。在docker images的输出中,第一列就是REPOSITORY。|:另一个管道符号,用于将awk的输出传递给sort。sort -u:sort按字母顺序对输入行进行排序。-u表示唯一,它会去除重复的行。这样我们就得到了一个唯一的仓库名列表,也就是我们的镜像流列表。
输出将是一个唯一的仓库名列表,如下所示:
REPOSITORY
hello-world
ubuntu
这个命令可以有效地列出你系统中已下载镜像的现有镜像流(仓库)。
列出特定镜像流中的镜像
在上一步中,你学习了如何列出现有的所有镜像流(仓库)。现在,你将学习如何列出属于特定镜像流的镜像。当你想查看某个特定镜像的不同版本(标签)时,这很有用。
要列出特定镜像流的镜像,你可以使用 docker images 命令,后跟镜像流名称。例如,要列出 ubuntu 镜像流中的所有镜像,你可以使用:
docker images ubuntu
在运行此命令之前,让我们确保你的系统上有 ubuntu 镜像。如果没有,你可以使用 docker pull 命令拉取它。
docker pull ubuntu
你应该会看到表明正在下载镜像的输出。
Using default tag: latest
latest: Pulling from library/ubuntu
...
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
现在 ubuntu 镜像已可用,你可以列出 ubuntu 镜像流中的镜像:
docker images ubuntu
输出将显示属于 ubuntu 镜像流的镜像。如果你只拉取了 latest 标签的镜像,你会看到类似以下的内容:
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest d621e9f15c2f 2 weeks ago 72.8MB
如果你还下载了 ubuntu 的其他标签的镜像,它们也会列在这里。
你可以将 ubuntu 替换为你在上一步 docker images 输出中看到的任何其他镜像流名称,以列出该特定镜像流中的镜像。例如,要列出 hello-world 镜像流中的镜像:
docker images hello-world
此命令将显示 hello-world 镜像流中可用的镜像。
将镜像记录到特定平台的镜像流中
在这一步中,你将学习如何为特定平台将镜像“记录”到镜像流中。在 Docker 术语中,这通常是通过用一个包含所需镜像流和可能的平台信息的新名称来标记现有镜像来完成的。标记镜像本质上是为现有镜像层创建一个新的指针,使你能够用不同的名称和标签来引用同一个镜像。
标记镜像的基本命令是 docker tag,其语法如下:
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
SOURCE_IMAGE[:TAG]:这是你要标记的现有镜像的名称和可选标签。TARGET_IMAGE[:TAG]:这是你要分配给镜像的新名称和可选标签。TARGET_IMAGE部分代表镜像流名称。
让我们使用上一步中拉取的 ubuntu 镜像。我们将用一个新的镜像流名称(例如 myubuntu)来标记它。
首先,让我们验证现有的 ubuntu 镜像及其 ID:
docker images ubuntu
你会看到类似以下的输出,注意其中的 IMAGE ID:
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest d621e9f15c2f 2 weeks ago 72.8MB
现在,让我们用新的镜像流名称 myubuntu 和标签 v1.0 来标记 ubuntu:latest 镜像:
docker tag ubuntu:latest myubuntu:v1.0
如果该命令执行成功,不会产生太多输出,它只是创建了新的标签。
现在,让我们再次列出镜像,看看新标记的镜像:
docker images
你现在应该会看到原始的 ubuntu:latest 镜像和新的 myubuntu:v1.0 镜像,它们都指向相同的 IMAGE ID:
REPOSITORY TAG IMAGE ID CREATED SIZE
myubuntu v1.0 d621e9f15c2f 2 weeks ago 72.8MB
ubuntu latest d621e9f15c2f 2 weeks ago 72.8MB
hello-world latest d2c94e258dcb 2 months ago 13.3kB
注意,myubuntu:v1.0 和 ubuntu:latest 具有相同的 IMAGE ID。这证实了 myubuntu:v1.0 只是对同一底层镜像数据的新引用。
虽然 docker tag 命令本身在标记过程中不会明确处理平台,但镜像本身可能是为特定平台构建的。当你拉取镜像时,Docker 通常会拉取适合你系统架构的镜像。如果你需要处理不同平台的镜像,通常会使用 docker buildx 等工具来构建多平台镜像,或者在拉取操作期间指定平台(例如 docker pull --platform linux/amd64 ubuntu)。然而,就将现有镜像“记录”到镜像流而言,docker tag 命令是在不同镜像流名称下为该镜像创建新引用的标准方法。
总结
在本次实验中,你学习了如何使用 docker scout stream 命令管理镜像流。首先,你了解了如何列出现有的镜像流,镜像流本质上是镜像的仓库或集合。你使用 docker images 命令查看所有已下载的镜像,然后使用 awk 和 sort -u 处理输出,以提取并列出唯一的镜像流名称(仓库)。
你还学习了如何列出属于特定镜像流的镜像,以及如何为特定平台将镜像记录到镜像流中。这些步骤展示了在镜像流的上下文中组织和管理 Docker 镜像的基本操作。



