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

时间:2014-06-30 04:09:58

标签: docker docker-registry

我想知道Docker的图像在我的本地主机中存储的位置。 我可以在不使用Docker-HubDockerfile的情况下共享我的Docker-Image,但真正的'泊坞窗,图片?当我推动'时,究竟发生了什么?我的Docker-Image到Docker-Hub?

4 个答案:

答案 0 :(得分:215)

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

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

当您推送图像时,这些图层将被发送到注册表(默认情况下为docker hub注册表...除非您使用其他注册表前缀标记图像)并存储在那里。推送时,图层ID用于检查您是否已在本地拥有该图层,或者是否需要下载该图层。您可以使用docker history来查看使用了哪些图层(其他图像)(以及在某种程度上,创建图层的命令)。

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

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

  • 托管您自己的私人注册表。 - 过时,请参阅评论 请参阅docker registry image。我们已经构建了一个s3 backed registry,您可以根据需要启动和停止(所有状态都保存在您选择的s3存储桶上),这对于设置来说是微不足道的。这也是一种观察推送到注册表时会发生什么的有趣方式

  • 使用其他注册表,例如quay.io(我没有亲自尝试过),尽管您对docker hub的任何疑虑都可能适用于此处。

答案 1 :(得分:18)

基于this blog,可以通过执行以下命令共享没有docker注册表的docker镜像:

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

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

docker load --input latestversion-1.0.0.tar

答案 2 :(得分:6)

如果您不想使用Docker Hub本身,您可以在JFrog的Artifactory下托管您自己的Docker存储库:

https://www.jfrog.com/confluence/display/RTF/Docker+Repositories

然后将在您自己的服务器上运行。

其他托管供应​​商可用,例如CoreOS:

http://www.theregister.co.uk/2014/10/30/coreos_enterprise_registry/

买了quay.io

答案 3 :(得分:1)

可以通过3个简单的步骤将docker镜像发送到远程服务器:

  1. 在本地,将docker镜像保存为 .tar docker save -o <path for created tar file> <image name>

  2. 在本地,使用 scp .tar 转移到远程

  3. 在远程服务器上,将映像加载到docker中: 的 docker load -i <path to docker image tar file>