我想知道Docker的映像到底存储在本地主机中的什么位置。我可以不使用Docker-Hub或Dockerfile而是“真实”的Docker- Image 来共享我的Docker-Image吗?当我将Docker-Image“推”到Docker-Hub时到底发生了什么?
Docker-Hub
Dockerfile
Docker映像存储为文件系统层。Dockerfile中的每个命令都会创建一个层。您也可以docker commit在进行一些更改后(docker run可能通过)在命令行中使用来创建图层。
docker commit
docker run
这些图层默认情况下存储在/var/lib/docker。尽管您可以(从理论上)从那里挑选文件并将其安装在其他Docker服务器中,但使用Docker使用的内部表示形式可能不是一个好主意。
/var/lib/docker
当您推送映像时,这些层将发送到注册表(默认情况下为docker hub注册表……除非您使用其他注册表前缀标记映像),然后存储在其中。推送时,图层ID用于检查您是否已经在本地拥有该图层或需要下载该图层。您可以docker history用来查看使用了哪些层(其他图像)(在某种程度上,哪个命令创建了该层)。
docker history
至于无需推送至docker hub注册表即可共享映像的选项,最佳选择是:
docker save图片或docker export容器。这会将tar文件输出到标准输出,因此您需要执行docker save 'dockerizeit/agent' > dk.agent.latest.tar。然后,您可以使用docker load或docker import在其他主机中。
docker save
docker export
docker save 'dockerizeit/agent' > dk.agent.latest.tar
docker load
docker import
托管您自己的私人注册表。- 已经过时了,看评论 见 泊坞窗注册表图像。我们构建了一个支持s3的注册表,您可以根据需要启动和停止它(所有状态都保存在您选择的s3存储桶中),这对于设置很简单。这也是观察推送到注册表时会发生什么的有趣方式
使用类似quay.io的其他注册表(我个人没有尝试过),尽管您对Docker Hub的任何担心也可能在这里适用。