从本地目录导入镜像并应用新配置
在前面的步骤中,你已经学习了如何从 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 指令,如 CMD、ENTRYPOINT、ENV、EXPOSE、LABEL、ONBUILD、STOPSIGNAL、USER 和 WORKDIR
~/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 配置已正确应用。