如何在不使用 Docker-Hub 的情况下共享我的 Docker-Image?

新手上路,请多包涵

我想知道 Docker 的图像究竟存储在我的本地主机中的哪个位置。我可以在不使用 Docker-HubDockerfile 但使用“真正的” Docker-Image 的情况下共享我的 Docker-Image 吗?当我将 Docker-Image 推送到 Docker-Hub 时到底发生了什么?

原文由 yaquawa 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 410
2 个回答

Docker 镜像存储为文件系统层。 Dockerfile 中的每个命令都会创建一个层。您还可以在进行一些更改后从命令行使用 docker commit 创建图层(可能通过 docker run )。

这些层默认存储在 /var/lib/docker 下。虽然您可以(理论上)从那里挑选文件并将其安装在不同的 docker 服务器中,但使用 Docker 使用的内部表示可能是一个坏主意。

当你推送你的镜像时,这些层会被发送到注册表(默认情况下是 docker hub 注册表……除非你用另一个注册表前缀标记你的镜像)并存储在那里。拉取的时候,layer id用来检查本地是否已经有layer或者需要下载。您可以使用 docker history 查看使用了哪些图层(其他图像)(以及在某种程度上,哪个命令创建了该图层)。

至于在不推送到 docker hub 注册表的情况下共享图像的选项,您的最佳选择是:

  • docker save 图像或 docker export 容器。这会将 tar 文件输出到标准输出,因此您会喜欢执行类似 docker save 'dockerizeit/agent' > dk.agent.latest.tar 的操作。然后您可以在不同的主机中使用 docker loaddocker import

  • 托管您自己的私人注册表。 - 过时,见评论docker 注册表图像。我们构建了一个 支持 s3 的注册表,您可以根据需要启动和停止它(所有状态都保存在您选择的 s3 存储桶中),这很容易设置。这也是一种有趣的方式来观察推送到注册表时会发生什么

  • 使用另一个注册表,例如 quay.io (我没有亲自尝试过),尽管您对 docker hub 的任何担忧可能也适用于此。

原文由 Abel Muiño 发布,翻译遵循 CC BY-SA 4.0 许可协议

根据 这篇博客,可以通过执行以下命令共享一个没有 docker 注册表的 docker 镜像:

 docker save --output latestversion-1.0.0.tar dockerregistry/latestversion:1.0.0

完成此命令后,可以将图像复制到服务器并按如下方式导入:

 docker load --input latestversion-1.0.0.tar

原文由 030 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题