如何共享我的Docker-Image而不使用Docker-Hub?

我想知道Docker的图像在我的本地主机中的确切存储位置。 我可以共享我的Docker-Image而不使用Docker-HubDockerfile,而是“真正的”Docker-Image吗?当我将Docker-Image“推送”到Docker-Hub时,到底发生了什么?< / p >
139333 次浏览

Docker映像存储为文件系统层。Dockerfile中的每个命令都创建一个层。你也可以在做了一些改变(可能是通过docker run)之后,从命令行使用docker commit来创建层。

这些层默认存储在/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

  • 托管您自己的私有注册表。- __abc0 __abc1

  • 使用另一个注册表,如quay.io(我个人没有尝试过),尽管你对docker中心的任何担忧可能也适用于这里。

(更新)

最近,有亚马逊AWS ECR(弹性容器注册表),它提供了一个Docker镜像注册表,您可以通过AWS IAM访问管理服务控制访问。当您推送映像时,ECR还可以在映像上运行CVE(漏洞)检查。

一旦您创建了您的ECR,并获得&;url &;你可以根据你所创建的权限,根据需要进行推送和拉取:因此,你可以根据自己的意愿将其设置为私有或公共。

定价是根据存储的数据量和数据传输成本。

https://aws.amazon.com/ecr/

(原来的答案)

如果你不想使用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

基于这个博客,可以在没有docker注册表的情况下共享docker镜像:

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

一旦这个命令已经完成,你可以复制镜像到一个服务器,并导入它如下:

docker load --input latestversion-1.0.0.tar

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

  1. 在本地,将docker映像保存为. tar:
docker save -o <path for created tar file> <image name>
  1. 在本地,使用scp.tar传输到远程

  2. 在远程服务器上,加载镜像到docker:

docker load -i <path to docker image tar file>