Docker pull下来的镜像文件、创建出来的容器文件都存在本地的什么地方了?

为什么80%的码农都做不了架构师?>>>   hot3.png

我们首先来看看 /var/lib/docker/这个文件夹下的内容。打开这个文件夹下的 repositories 文件,你将会看到类似下面这样的JSON 文件:

$ sudo cat /var/lib/docker/repositories | python -mjson.tool

{

“Repositories”: {

“ubuntu”: {

“12.04″: “8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c”,

“12.10″: “b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc”,

“latest”: “8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c”,

“precise”: “8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c”,

“quantal”: “b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc”

}

}

}

看看,是不是正好和docker images的内容一致呢。

REPOSITORY TAG IMAGE ID CREATED SIZE

ubuntu              12.04               8dbd9e392a96        8 months ago        131.3 MB (virtual 131.3 MB)

ubuntu              latest              8dbd9e392a96        8 months ago        131.3 MB (virtual 131.3 MB)

ubuntu              precise             8dbd9e392a96        8 months ago        131.3 MB (virtual 131.3 MB)

ubuntu              12.10               b750fe79269d        8 months ago        24.65 kB (virtual 179.7 MB)

ubuntu              quantal             b750fe79269d        8 months ago        24.65 kB (virtual 179.7 MB)

接着,我们再来看看 /var/lib/docker/graph/这个文件夹:

$ sudo ls -al /var/lib/docker/graph

total 24drwx—— 6 root root 4096 Nov 22 06:52 .

drwx—— 5 root root 4096 Dec 13 04:25 ..

drwxr-xr-x 3 root root 4096 Dec 13 04:26 27cf784147099545

drwxr-xr-x 3 root root 4096 Nov 22 06:52 8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c

drwxr-xr-x 3 root root 4096 Nov 22 06:52 b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc

drwx—— 3 root root 4096 Nov 22 06:52 _tmp

这些输出结果可能有点晦涩(Not terribly friendly),但是从中我们可以看出Docker是使用repositories JSON文件来记述镜像信息的,此JSON文件包含了仓库名、标签、以及标签对应的镜像ID。

我们有两个来自ubuntu仓库的镜像,这其中标签为12.04,precise和latest都指向的是同一个镜像,其ID为 8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c (这个ID长度为64位,但是我们可以使用其12位的简短模式,比如8dbd9e392a96)。

那么这些以镜像ID命名的文件夹下面又保存了什么东西呢?

$ sudo ls -al /var/lib/docker/graph/8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c

total 20

drwxr-xr-x  3 root root 4096 Nov 22 06:52 .

drwx——  6 root root 4096 Nov 22 06:52 ..-rw——-  1 root root  437 Nov 22 06:51 jsondrwxr-xr-x 22 root root 4096 Apr 11  2013 layer-rw——-  1 root root    9 Nov 22 06:52 layersize

这个文件夹下的内容如下:

  • json -保存着关于这个镜像的元数据

  • layersize – 一个整数,表示layer的大小。

  • layer/ – 子文件夹,保存着rootfs该容器的镜像

$ sudo cat /var/lib/docker/graph/8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c/json | python -mjson.tool

{

“comment”: “Imported from -“,

“container_config”: {

“AttachStderr”: false,

“AttachStdin”: false,

“AttachStdout”: false,

“Cmd”: null,

“Env”: null,

“Hostname”: “”,

“Image”: “”,

“Memory”: 0,

“MemorySwap”: 0,

“OpenStdin”: false,

“PortSpecs”: null,

“StdinOnce”: false,

“Tty”: false,

“User”: “”

},

“created”: “2013-04-11T14:13:15.57812-07:00″,

“docker_version”: “0.1.4″,

“id”: “8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c”

}



$ sudo cat /var/lib/docker/graph/8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c/layersize131301903$ sudo ls -al /var/lib/docker/graph/8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c/layer

total 88drwxr-xr-x 22 root root 4096 Apr 11  2013 .

drwxr-xr-x  3 root root 4096 Nov 22 06:52 ..

drwxr-xr-x  2 root root 4096 Apr 11  2013 bin

drwxr-xr-x  2 root root 4096 Apr 19  2012 boot

drwxr-xr-x  4 root root 4096 Nov 22 06:51 dev

drwxr-xr-x 41 root root 4096 Nov 22 06:51 etc

drwxr-xr-x  2 root root 4096 Apr 19  2012 home

drwxr-xr-x 11 root root 4096 Nov 22 06:51 lib

drwxr-xr-x  2 root root 4096 Nov 22 06:51 lib64

drwxr-xr-x  2 root root 4096 Apr 11  2013 media

drwxr-xr-x  2 root root 4096 Apr 19  2012 mnt

drwxr-xr-x  2 root root 4096 Apr 11  2013 opt

drwxr-xr-x  2 root root 4096 Apr 19  2012 proc

drwx——  2 root root 4096 Nov 22 06:51 root

drwxr-xr-x  4 root root 4096 Nov 22 06:51 run

drwxr-xr-x  2 root root 4096 Nov 22 06:51 sbin

drwxr-xr-x  2 root root 4096 Mar  5  2012 selinux

drwxr-xr-x  2 root root 4096 Apr 11  2013 srv

drwxr-xr-x  2 root root 4096 Apr 14  2012 sys

drwxrwxrwt  2 root root 4096 Apr 11  2013 tmp

drwxr-xr-x 10 root root 4096 Nov 22 06:51 usr

drwxr-xr-x 11 root root 4096 Nov 22 06:51 var

看到这里你应该有些顿悟了吧,这就是我们为什么即使我们不和远程索引或者注册表交互也能通过仓库名来使用一个镜像的原理了。因为一旦你将镜像从远程下载到本地,Docker可以通过仓库名称来使用它们。当你创建自己的Dockerfile的时候也不例外。


转载于:https://my.oschina.net/denglz/blog/405013

你可能感兴趣的:(Docker pull下来的镜像文件、创建出来的容器文件都存在本地的什么地方了?)