如何使用 docker image load 命令加载镜像

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,你将学习如何使用 docker load 命令从归档文件加载 Docker 镜像。这是在机器之间传输镜像而不依赖 Docker 注册表的关键技能。你将首先使用 docker save 命令准备一个 Docker 镜像归档文件。

准备工作完成后,你将探索加载镜像的不同方法。这包括从标准输入(STDIN)加载镜像、使用 --input 参数从文件加载,以及使用 --platform 参数专门加载特定平台变体。通过完成这些步骤,你将获得离线管理 Docker 镜像的实践经验。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/rmi("Remove Image") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/ImageOperationsGroup -.-> docker/save("Save Image") docker/ImageOperationsGroup -.-> docker/load("Load Image") subgraph Lab Skills docker/pull -.-> lab-555156{{"如何使用 docker image load 命令加载镜像"}} docker/rmi -.-> lab-555156{{"如何使用 docker image load 命令加载镜像"}} docker/images -.-> lab-555156{{"如何使用 docker image load 命令加载镜像"}} docker/save -.-> lab-555156{{"如何使用 docker image load 命令加载镜像"}} docker/load -.-> lab-555156{{"如何使用 docker image load 命令加载镜像"}} end

准备 Docker 镜像归档文件

在这一步骤中,我们将学习如何准备 Docker 镜像归档文件。这对于在不同机器间传输 Docker 镜像而不依赖 Docker 注册表非常有用。我们将使用 docker save 命令为现有 Docker 镜像创建归档文件。

首先,让我们拉取一个简单的 Docker 镜像用于演示。我们将使用 hello-world 镜像。

docker pull hello-world

你应该能看到显示镜像正在被拉取的输出信息,这是一个非常小的镜像。

Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

现在我们有了 hello-world 镜像,可以将其保存为 tar 归档文件。我们将把它保存到 ~/project 目录下名为 hello-world.tar 的文件中。

docker save -o ~/project/hello-world.tar hello-world

-o 参数用于指定输出文件路径。该命令会将 hello-world 镜像保存到指定文件中。如果命令执行成功,你将不会看到任何输出。

要验证归档文件是否创建成功,你可以列出 ~/project 目录中的文件。

ls ~/project

你应该能看到列出的 hello-world.tar 文件。

hello-world.tar

现在这个 hello-world.tar 文件包含了 hello-world 镜像的 Docker 镜像数据。你可以将此文件传输到另一台机器,并使用 docker load 命令从中加载镜像,这将在后续步骤中详细介绍。

从标准输入 (STDIN) 加载 Docker 镜像

在这一步骤中,我们将学习如何从标准输入 (STDIN) 加载 Docker 镜像。这是另一种加载镜像归档文件的方法,特别适用于将 docker save 的输出直接通过管道传递给 docker load 的场景。

首先,让我们删除上一步骤中拉取并保存的 hello-world 镜像。这将确保我们是从归档文件加载镜像,而不是使用现有的镜像。

docker rmi hello-world

你应该能看到显示镜像已被删除的输出信息。

Untagged: hello-world:latest
Deleted: sha256:...

现在,我们将使用 cat 命令将 hello-world.tar 文件内容输出到标准输出,然后通过管道将该输出传递给 docker load 命令。

cat ~/project/hello-world.tar | docker load

docker load 命令不带 --input 参数使用时,它会从 STDIN 读取镜像归档文件。你应该能看到显示镜像层正在被加载的输出信息。

...
Loaded image: hello-world:latest

要验证镜像是否已成功加载,你可以列出可用的 Docker 镜像。

docker images

你应该能在输出中看到 hello-world 镜像。

REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    ...            ...           ...

这演示了如何从通过管道传递给 STDIN 的归档文件加载 Docker 镜像。

使用 --input 参数从文件加载 Docker 镜像

在本步骤中,我们将学习如何通过 docker load 命令的 --input 参数从文件加载 Docker 镜像。这是从文件加载镜像归档最常用的方法。

首先,让我们再次删除 hello-world 镜像,以确保我们是从归档文件加载它。

docker rmi hello-world

你应该能看到确认镜像删除的输出信息。

Untagged: hello-world:latest
Deleted: sha256:...

现在,我们将使用带有 --input 参数的 docker load 命令,指定我们在第一步创建的 hello-world.tar 文件路径。

docker load --input ~/project/hello-world.tar

--input 参数指示 docker load 从指定文件而非 STDIN 读取镜像归档。你应该能看到与从 STDIN 加载时类似的输出,显示镜像层正在被加载。

...
Loaded image: hello-world:latest

要确认镜像已加载成功,请再次列出 Docker 镜像。

docker images

hello-world 镜像应该会出现在列表中。

REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    ...            ...           ...

当你已将镜像归档保存为文件时,这种方法通常更受推荐,因为它比通过管道将文件内容传递给 STDIN 的方式更加明确直观。

使用 --platform 参数加载特定平台变体

在本步骤中,我们将探索如何使用 --platform 参数从归档文件中加载特定平台变体的 Docker 镜像。当镜像归档包含多种架构的变体(如 linux/amd64linux/arm64)时,这个功能特别有用。

首先,让我们再次删除 hello-world 镜像以便重新开始。

docker rmi hello-world

你应该能看到确认镜像删除的输出信息。

Untagged: hello-world:latest
Deleted: sha256:...

现在,我们将使用带有 --input 参数的 docker load 命令指定归档文件,并通过 --platform 参数指定目标平台。在本示例中,我们将指定 linux/amd64 架构,这是 LabEx 虚拟机的架构。

docker load --input ~/project/hello-world.tar --platform linux/amd64

--platform 参数确保 Docker 仅加载与指定架构和操作系统匹配的镜像变体。尽管 hello-world 镜像非常简单,其归档文件中可能没有显著的平台差异,但这演示了该参数的使用方法。你应该能看到显示镜像层正在被加载的输出信息。

...
Loaded image: hello-world:latest

要确认镜像已加载成功,请列出 Docker 镜像。

docker images

hello-world 镜像应该会出现在列表中。

REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    ...            ...           ...

在处理多架构镜像归档时,使用 --platform 参数非常重要,它能确保你为当前环境加载正确的镜像变体。

总结

在本实验中,我们学习了如何使用 docker save 命令准备 Docker 镜像归档文件,这对于无需注册表传输镜像的场景至关重要。我们成功地将 hello-world 镜像保存为 tar 文件。

随后,我们探索了使用 docker load 命令从归档文件加载 Docker 镜像的不同方法。我们掌握了如何从标准输入(STDIN)加载镜像,这在管道操作中非常实用;以及如何通过 --input 参数直接从文件加载镜像。最后,我们还学习了使用 --platform 参数从归档中加载特定平台变体的镜像,充分展示了 docker load 命令在管理多平台镜像方面的灵活性。