如何使用 docker image import 命令创建镜像

DockerDockerBeginner
立即练习

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

简介

在本实验中,你将学习如何使用 docker image import 命令从不同来源创建 Docker 镜像。你将探索以下操作:直接从远程 URL 导入镜像、使用标准输入从本地 tarball 导入、附带提交信息从本地 tarball 导入,以及从包含新配置的本地目录导入。

通过动手实践,你将获得使用 docker image import 命令各种选项的实际经验,并掌握如何验证导入的镜像。本实验将使你具备从现有 tarball 或目录高效创建 Docker 镜像的能力,为你的 Docker 工作流提供更多灵活性。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/ImageOperationsGroup -.-> docker/load("Load Image") subgraph Lab Skills docker/run -.-> lab-555154{{"如何使用 docker image import 命令创建镜像"}} docker/ls -.-> lab-555154{{"如何使用 docker image import 命令创建镜像"}} docker/images -.-> lab-555154{{"如何使用 docker image import 命令创建镜像"}} docker/load -.-> lab-555154{{"如何使用 docker image import 命令创建镜像"}} end

从远程 URL 导入镜像

在这一步骤中,你将学习如何直接从远程 URL 导入 Docker 镜像。当你需要从网络服务器上获取镜像 tarball 文件,并希望无需手动下载就能将其加载到 Docker 环境中时,这个方法非常实用。

首先,我们使用 curl 命令从远程 URL 下载一个示例镜像 tarball 文件。为了演示目的,我们将使用一个公开可用的镜像 tarball。

curl -o ~/project/alpine.tar https://labex.io/images/alpine.tar

该命令从指定 URL 下载镜像 tarball 文件,并将其保存为 ~/project 目录下的 alpine.tar-o 参数用于指定输出文件的名称和位置。

接下来,我们将使用 docker image import 命令将这个 tarball 导入到你的 Docker 环境中。import 命令可以接受 URL 或文件路径作为输入。当使用 URL 时,Docker 会直接下载内容并进行导入。

docker image import https://labex.io/images/alpine.tar

该命令从远程 URL 导入镜像。Docker 会下载 tarball 文件并根据其内容创建新镜像。默认情况下,导入的镜像没有仓库名称和标签。

要验证镜像是否已成功导入,你可以使用 docker images 命令列出可用镜像。

docker images

你应该会看到一个 REPOSITORYTAG 都显示为 <none> 的镜像,并且 CREATED 时间是最近的。这就是你刚刚导入的镜像。

你也可以在导入过程中为镜像指定仓库名称和标签。只需在 URL 后面添加所需的仓库名称和标签即可。

docker image import https://labex.io/images/alpine.tar alpine:latest

这个命令导入相同的镜像,但将其标记为 alpine:latest

现在,再次列出镜像以查看新标记的镜像。

docker images

你现在应该能看到一个仓库名称为 alpine、标签为 latest 的镜像。

通过标准输入从本地 tarball 导入镜像

在上一步中,你学习了如何从远程 URL 导入 Docker 镜像。本步骤将教你如何使用标准输入(STDIN)从本地 tarball 文件导入 Docker 镜像。当你拥有本地镜像 tarball 并希望将其内容直接通过管道传输给 docker image import 命令时,这个方法非常实用。

首先,请确保你的 ~/project 目录中存在上一步获取的 alpine.tar 文件。如果没有,可以使用 curl 重新下载:

curl -o ~/project/alpine.tar https://labex.io/images/alpine.tar

现在,我们将使用 cat 命令读取 alpine.tar 文件内容,并通过管道将其传输给 docker image import 命令。docker image import- 参数表示从标准输入读取数据。

cat ~/project/alpine.tar | docker image import -

该命令读取 alpine.tar 文件并将其内容作为输入传递给 docker image import 命令。Docker 随后会根据接收到的数据导入镜像。与未指定标签的 URL 导入方式类似,默认情况下导入的镜像不会有仓库名称和标签。

要验证镜像是否已成功导入,请列出可用镜像:

docker images

你应该会看到另一个 REPOSITORYTAG 都显示为 <none> 的镜像。

你也可以在通过标准输入导入时指定仓库名称和标签,语法与从 URL 导入类似。

cat ~/project/alpine.tar | docker image import - alpine:stdin

该命令从标准输入导入镜像,并将其标记为 alpine:stdin

再次列出镜像以确认新标签:

docker images

你现在应该能看到一个仓库名称为 alpine、标签为 stdin 的镜像。

使用标准输入是一种灵活的镜像导入方式,特别适合在命令链中使用,或者当你需要解压缩并一次性导入压缩的 tarball 文件时。

从本地 tarball 导入镜像并添加提交信息

在前面的步骤中,你已学习了如何从 URL 和标准输入导入镜像。本步骤将教你如何从本地 tarball 文件导入镜像,并在导入过程中添加提交信息。添加提交信息可以帮助你记录导入镜像的来源或用途。

首先,请确保你的 ~/project 目录中存在 alpine.tar 文件。如果没有,请下载:

curl -o ~/project/alpine.tar https://labex.io/images/alpine.tar

现在,我们将使用带有 -m 标志的 docker image import 命令来添加提交信息,同时指定本地文件路径作为源。

docker image import -m "Imported alpine base image" ~/project/alpine.tar alpine:commit

在这个命令中:

  • -m "Imported alpine base image" 为镜像历史添加指定的提交信息
  • ~/project/alpine.tar 是本地 tarball 文件的路径
  • alpine:commit 是为导入镜像指定的仓库名称和标签

执行此命令后,Docker 将从本地 tarball 导入镜像并应用提交信息。

要验证导入结果和提交信息,可以使用 docker image history 命令检查镜像:

docker image history alpine:commit

该命令会显示 alpine:commit 镜像的历史记录。你会在 COMMENT 列中看到提交信息 "Imported alpine base image"。

你也可以列出镜像来确认新标签:

docker images

你应该会看到一个仓库名称为 alpine、标签为 commit 的镜像。

添加提交信息是跟踪 Docker 镜像变更和来源的良好实践,特别是在从外部源导入时尤为重要。

从本地目录导入镜像并应用新配置

在前面的步骤中,你已经学习了如何从 tarball 文件导入镜像。本步骤将教你如何从本地目录导入镜像,并在导入过程中应用新的配置。当你拥有一个目录结构的文件系统快照,并希望将其转换为具有特定设置(如运行命令)的 Docker 镜像时,这个方法非常实用。

首先,让我们创建一个简单的目录结构和文件,这些内容将被包含在我们的镜像中。

mkdir ~/project/myimage
echo "Hello, Docker!" > ~/project/myimage/hello.txt

这会在你的 ~/project 目录下创建一个名为 myimage 的目录,并在其中生成一个包含文本 "Hello, Docker!" 的 hello.txt 文件。

现在,我们将使用 docker image import 命令导入 ~/project/myimage 目录的内容。同时使用 -c 标志为镜像指定配置变更。在这个例子中,我们将设置 CMD 指令,它定义了从这个镜像启动容器时要执行的默认命令。

docker image import -c 'CMD ["/bin/cat", "/hello.txt"]' ~/project/myimage myimage:latest

在这个命令中:

  • -c 'CMD ["/bin/cat", "/hello.txt"]' 将镜像的默认命令设置为 /bin/cat /hello.txt-c 标志允许你应用 Dockerfile 指令,如 CMDENTRYPOINTENVEXPOSELABELONBUILDSTOPSIGNALUSERWORKDIR
  • ~/project/myimage 是包含文件系统内容的本地目录路径
  • myimage:latest 是为导入镜像指定的仓库名称和标签

执行此命令后,Docker 将基于 ~/project/myimage 目录的内容创建一个新镜像,并应用指定的 CMD 配置。

要验证导入结果和配置,可以列出镜像:

docker images

你应该会看到一个仓库名称为 myimage、标签为 latest 的镜像。

现在,让我们从这个镜像运行一个容器,看看 CMD 指令是否正确应用。

docker run myimage:latest

这个命令从 myimage:latest 镜像启动一个容器。由于我们将 CMD 设置为 /bin/cat /hello.txt,容器应该执行这个命令并打印 hello.txt 文件的内容,即 "Hello, Docker!"。

你会在终端看到打印出的 "Hello, Docker!"。这确认了目录内容已成功导入,且 CMD 配置已正确应用。

总结

在本实验中,我们学习了如何使用 docker image import 命令从多种来源创建 Docker 镜像。我们首先从远程 URL 直接导入镜像,演示了如何加载托管在线的镜像 tarball 而无需手动下载。这一过程涉及使用 curl 下载示例 tarball,然后使用 docker image import 命令以 URL 作为输入,展示了如何指定或不指定仓库名称和标签进行导入。

虽然提供的内容中未完全详述后续步骤,但可能包括:使用 STDIN 从本地 tarball 文件导入镜像、导入时添加提交信息以便更好地追踪、以及从本地目录导入同时应用新配置。这些步骤将进一步展示 docker image import 命令在创建和管理 Docker 镜像时的灵活性及不同使用场景。