一、镜像(Image) vs Dockerfile
1、docker在镜像(image)中运行你的代码,而不是Dockerfile,镜像文件就是从Dockerfile编译而得到的不透明资产
2、dockerfile是通过docker build命令来编译镜像的配置文件,当你用docker push命令发布自己的镜像的时候,你发布的不是任何你的代码,而是由你的代码编译出来的镜像文件
二、注册表(Registry) vs 索引(Index)
注册表(镜像注册表,registry)和索引(镜像索引,index)这两个概念,以及它们的区别也很特殊。
一个索引用来管理用户账号,权限,搜索,打标签,以及其它可以方便的通过Web界面来完成的工作。
一个注册表则是真正的用来保存、提供镜像文件的概念。它通过索引来完成用户认证步骤。
当你执行docker search命令的时候,Docker会到index里执行查找工作,而不是registry。从实际上来说,Docker会在索引(index)所知道的多个注册表(registry)中进行查找。
而当你执行docker push 或者 docker pull操作的时候,index会判断你是否有权限访问或者修改该镜像文件,如果通过index的认证操作的话,registry则进行实际的镜像存储工作或者将镜像文件发送给请求端。同样,index会知道你想访问的镜像的存储位置(哪个registry上),然后将访问请求转向到相应的registry。
三、镜像仓库(Repository )
Docker 使用类似于Github或者其他SCM工具的仓库概念。当然,它们也不完全等价。
实际上,这是一个问题,因为镜像仓库是所有这些概念的合集,而不是单独的任何一个
四、docker image本机上的本地存储位置
docker images命令显示的内容都是本机上存在的资源,那我这些资源到底会在哪里呢,那我们来看看/var/lib/docker这个文件夹下的内容:
[root@docker docker]# cd /var/lib/docker/
[root@docker docker]# ll repositories*
-rw——- 1 root root 1047 Sep 21 10:22 repositories-aufs
-rw——- 1 root root 1050 Sep 25 01:37 repositories-devicemapper
我们可以看到在该目录下有两个文件
cat repositories-devicemapper | python -mjson.tool
cat repositories-aufs | python -mjson.tool
其实两个文件都保存着镜像的信息。如果仔细辨认,你会发现:
repositories-devicemapper里面保存的是当前存在的本地镜像的信息
你每pull一个镜像下来,里面就会增加一段信息,例如这样:
"192.168.0.216:5000/httpd": {
"latest": "35972236645ab46a8cc3ff24fc39ed43e259134de5ff1a3216726eab3e2827c2"
},
repositories-aufs文件中保存的则是镜像仓库的信息。
你会发现/var/lib/docker下面还有一个文件夹graph
那我们来看看/var/lib/docker/graph下面有什么东西!
ls -l /var/lib/docker/graph/
下面有许许多多的文件夹,没错,那就是Images ID,并且是你曾经使用过的Images ID信息,还有layer,也许你在pull images的时候会发现,它在期间download layer。
drwx------ 2 root root 4096 Sep 21 11:43 f912d1b83a6c5f0d6409083fed731e5963aeb05ff2832f5e4899929f99ed86a1
drwx------ 2 root root 4096 Sep 15 09:03 f94304dc94e325bb13db375898780bec04fc83362381d6b8476ab288287e5d9a
drwx------ 2 root root 4096 Sep 15 08:59 f972ade4c9d5f9863b782ee685c8ec80da9bdb8e43834919214dd68d501687f0
drwx------ 2 root root 4096 Sep 21 12:04 f9a8cbc8dd13fb5bdbcff050cbeee76cc8c967a9ab2122714d00090c5815d385
drwx------ 2 root root 4096 Sep 15 09:47 f9bff7d0d06e65f89dce91e43caefc3fe090818bae24d67c9732bd4a7ada19dc
drwx------ 2 root root 4096 Sep 15 09:00 fe0e725486e9d7c95ff25b7ae77801187f60fb29aa15e916d5364485e94b3f18
drwx------ 2 root root 4096 Sep 15 09:47 ff0618bc0767411abb6b6f28200a67614fea418483f3faa5d649d92b53627e43
我们进入其中一个Images ID 文件夹里面
cd a68ca3ab3814f42c708499ff9ced589f465239912d3b27eea0bd04a9785dccfa/
ls
json layersize
里面有两个文件,json and layersize。那么这个json呢,就是当前Images的详细信息,而这个layersize呢,是一个整数,表示layer的大小。