20201111 docker目录结构
参考:https://segmentfault.com/a/1190000017579626
只拉了一个centos:8镜像
[root@centos7 ~]# docker pull centos:8
8: Pulling from library/centos
3c72a8ed6814: Pull complete
Digest: sha256:76d24f3ba3317fa945743bb3746fbaf3a0b752f10b10376960de01da70685fbd
Status: Downloaded newer image for centos:8
docker.io/library/centos:8
[root@centos7 ~]# docker images --digests
REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE
centos 8 sha256:76d24f3ba3317fa945743bb3746fbaf3a0b752f10b10376960de01da70685fbd 0d120b6ccaa8 3 months ago 215MB
/var/lib/docker目录结构

1、/var/lib/docker/builder
[root@centos7 ~]# ls /var/lib/docker/builder/
fscache.db
[root@centos7 ~]# file /var/lib/docker/builder/fscache.db
/var/lib/docker/builder/fscache.db: data
2、/var/lib/docker/buildkit

3、/var/lib/docker/containers
这个目录存放容器运行时的一些数据,目前没有运行容器,所以该目录为空
[root@centos7 ~]# ls /var/lib/docker/containers/
4、/var/lib/docker/image
[root@centos7 ~]# tree -C /var/lib/docker/image
/var/lib/docker/image
└── overlay2
├── distribution
│ ├── diffid-by-digest
│ │ └── sha256
│ │ ├── 0ca72de6f95718a4bd36e45f03fffa98e53819be7e75cb8cd1bcb0705b845939
│ │ ├── 171857c49d0f5e2ebf623e6cb36a8bcad585ed0c2aa99c87a055df034c1e5848
│ │ ├── 188c0c94c7c576fff0792aca7ec73d67a2f7f4cb3a6e53a84559337260b36964
│ │ ├── 3c72a8ed68140139e483fe7368ae4d9651422749e91483557cbd5ecf99a96110
│ │ ├── 419640447d267f068d2f84a093cb13a56ce77e130877f5b8bdb4294f4a90a84f
│ │ ├── 61e52f862619ab016d3bcfbd78e5c7aaaa1989b4c295e6dbcacddd2d7b93e1f5
│ │ ├── 6a5697faee43339ef8e33e3839060252392ad99325a48f7c9d7e93c22db4d4cf
│ │ ├── 85defa007a8b33f817a5113210cca4aca6681b721d4b44dc94928c265959d7d5
│ │ ├── 9dd8e8e549988a3e2c521f27f805b7a03d909d185bb01cdb4a4029e5a6702919
│ │ ├── a254829d9e55168306fd80a49e02eb015551facee9c444d9dce3b26d19238b82
│ │ ├── ba13d3bc422b493440f97a8f148d245e1999cb616cb05876edc3ef29e79852f2
│ │ └── f2dc206a393cd74df3fea6d4c1d3cefe209979e8dbcceb4893ec9eadcc10bc14
│ └── v2metadata-by-diffid
│ └── sha256
│ ├── 0c2689e3f9206b1c4adfb16a1976d25bd270755e734588409b31ef29e3e756d6
│ ├── 2367050c34dd9fd39052c35bf9a930e94a2be7202b33e1f8e64c1f04dd82011e
│ ├── 291f6e44771a7b4399b0c6fb40ab4fe0331ddf76eda11080f052b003d96c7726
│ ├── 2c8583333eb335ac202e1b798f9078ad0128f34c25a3dfe6f05e6816d3480900
│ ├── 3fd9df55318470e88a15f423a7d2b532856eb2b481236504bf08669013875de1
│ ├── 47dde53750b4a8ed24acebe52cf31ad131e73a9611048fc2f92c9b6274ab4bf3
│ ├── 7a694df0ad6cc5789a937ccd727ac1cda528a1993387bf7cd4f3c375994c54b6
│ ├── 80580270666742c625aecc56607a806ba343a66a8f5a7fd708e6c4e4c07a3e9b
│ ├── 93e19e6dd56b059a7356aa864f9916185559a56ff18da4b189a3fcc13d3aa0ee
│ ├── ace0eda3e3be35a979cec764a3321b4c7d0b9e4bb3094d20d3ff6782961a8d54
│ ├── cc9d18e90faad04bc3893cfaa50b7846ee75f48f5b8377a213fa52af2189095c
│ └── e2a648dc6400feb0d24484d83ba5800ed58adbcfdb9986f80d4ae106ac891968
├── imagedb
│ ├── content
│ │ └── sha256
│ │ └── 0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566
│ └── metadata
│ └── sha256
├── layerdb
│ ├── sha256
│ │ └── 291f6e44771a7b4399b0c6fb40ab4fe0331ddf76eda11080f052b003d96c7726
│ │ ├── cache-id
│ │ ├── diff
│ │ ├── size
│ │ └── tar-split.json.gz
│ └── tmp
└── repositories.json
15 directories, 30 files
repositories.json文件
repositories.json存储了本地所有的image列表,里面的centos:8
和centos@sha256:76d
其实是同一个镜像,上面docker images --digests
命令可以看到
[root@centos7 ~]# cat /var/lib/docker/image/overlay2/repositories.json | jq
{
"Repositories": {
"centos": {
"centos:8": "sha256:0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566",
"centos@sha256:76d24f3ba3317fa945743bb3746fbaf3a0b752f10b10376960de01da70685fbd": "sha256:0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566"
}
}
}
imagedb目录
[root@centos7 ~]# tree -C /var/lib/docker/image/overlay2/imagedb/
/var/lib/docker/image/overlay2/imagedb/
├── content
│ └── sha256
│ └── 0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566
└── metadata
└── sha256
4 directories, 1 file
该目录存储了镜像的相关信息,每个镜像的内容都包含在自己的目录下面,目录名就是该镜像的 Image ID
metadata目录保存每个镜像的父镜像ID,这里因为centos:8
镜像没有父镜像,所以该目录为空
content目录 存储镜像的JSON格式描述信息
- config字段:image运行为容器时的默认参数
- container:此处是一个容器id,该镜像当初是通过
docker build
构建过来的,该id就是构建镜像时产生的临时容器的ID - container_config:和上面一样,临时容器的配置
- history:构建该镜像的所有命令
- rootfs:该镜像包含的layer层的diff id
总结:单个image的配置信息在content目录中,以image id为文件名存储,image之间的关系存储在metadata中,以parent文件存储。
[root@centos7 ~]# cat /var/lib/docker/image/overlay2/imagedb/content/sha256/0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566 | jq
{
"architecture": "amd64",
"config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/bash"
],
"ArgsEscaped": true,
"Image": "sha256:69587a438b2c9b803db8ed4f6e6b5abce25a6b8ec2583a394807cf82bfd23693",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20200809",
"org.label-schema.license": "GPLv2",
"org.label-schema.name": "CentOS Base Image",
"org.label-schema.schema-version": "1.0",
"org.label-schema.vendor": "CentOS"
}
},
"container": "3b04ecd9fb2d3f921f12d858edf5f3a6aa7c36c8e1e6f74bd32555fd4d7f7da2",
"container_config": {
"Hostname": "3b04ecd9fb2d",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/sh",
"-c",
"#(nop) ",
"CMD [\"/bin/bash\"]"
],
"ArgsEscaped": true,
"Image": "sha256:69587a438b2c9b803db8ed4f6e6b5abce25a6b8ec2583a394807cf82bfd23693",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20200809",
"org.label-schema.license": "GPLv2",
"org.label-schema.name": "CentOS Base Image",
"org.label-schema.schema-version": "1.0",
"org.label-schema.vendor": "CentOS"
}
},
"created": "2020-08-10T18:19:49.837885498Z",
"docker_version": "18.09.7",
"history": [
{
"created": "2020-08-10T18:19:49.200589992Z",
"created_by": "/bin/sh -c #(nop) ADD file:538afc0c5c964ce0dde0141953a4dcf03c2d993c5989c92e7fee418e9305e2a3 in / "
},
{
"created": "2020-08-10T18:19:49.654025965Z",
"created_by": "/bin/sh -c #(nop) LABEL org.label-schema.schema-version=1.0 org.label-schema.name=CentOS Base Image org.label-schema.vendor=CentOS org.label-schema.license=GPLv2 org.label-schema.build-date=20200809",
"empty_layer": true
},
{
"created": "2020-08-10T18:19:49.837885498Z",
"created_by": "/bin/sh -c #(nop) CMD [\"/bin/bash\"]",
"empty_layer": true
}
],
"os": "linux",
"rootfs": {
"type": "layers",
"diff_ids": [
"sha256:291f6e44771a7b4399b0c6fb40ab4fe0331ddf76eda11080f052b003d96c7726"
]
}
}
layerdb目录
存储Docker镜像的Layer信息,当前只有一个centos:8
镜像,该镜像只有1层
[root@centos7 ~]# tree -C /var/lib/docker/image/overlay2/layerdb/
/var/lib/docker/image/overlay2/layerdb/
├── sha256
│ └── 291f6e44771a7b4399b0c6fb40ab4fe0331ddf76eda11080f052b003d96c7726
│ ├── cache-id
│ ├── diff
│ ├── size
│ └── tar-split.json.gz
└── tmp
3 directories, 4 files
-
cache-id:内容为一个uuid,指向layer本地真正的出处位置,这一串id就是
/var/lib/docker/overlayer2
下面的一个目录[root@centos7 ~]# cat /var/lib/docker/image/overlay2/layerdb/sha256/291f6e44771a7b4399b0c6fb40ab4fe0331ddf76eda11080f052b003d96c7726/cache-id 41460518d78d1f54347d24bb73156ce660746ebd23c372177600246780c33cf2
真正存储镜像的位置在这里
[root@centos7 ~]# tree -CL 2 /var/lib/docker/overlay2/ /var/lib/docker/overlay2/ ├── 41460518d78d1f54347d24bb73156ce660746ebd23c372177600246780c33cf2 │ ├── diff │ └── link ├── backingFsBlockDev └── l └── VXVZBYKWC6KJQTQINL5S74CCUZ -> ../41460518d78d1f54347d24bb73156ce660746ebd23c372177600246780c33cf2/diff
-
diff:该layer 层的diff id
[root@centos7 ~]# cat /var/lib/docker/image/overlay2/layerdb/sha256/291f6e44771a7b4399b0c6fb40ab4fe0331ddf76eda11080f052b003d96c7726/diff sha256:291f6e44771a7b4399b0c6fb40ab4fe0331ddf76eda11080f052b003d96c7726
-
size:该layer的大小,单位字节
[root@centos7 ~]# cat /var/lib/docker/image/overlay2/layerdb/sha256/291f6e44771a7b4399b0c6fb40ab4fe0331ddf76eda11080f052b003d96c7726/size 215102299 [root@centos7 ~]# echo $((215102299/1000/1000)) 215 [root@centos7 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos 8 0d120b6ccaa8 3 months ago 215MB
-
tar-split.json.gz:layer层数据tar压缩的split文件。使用tar-split.json.gz
distribution目录
Layer层diff id和digest的关系
[root@centos7 ~]# tree -C /var/lib/docker/image/overlay2/distribution/ /var/lib/docker/image/overlay2/distribution/ ├── diffid-by-digest │ └── sha256 │ ├── 0ca72de6f95718a4bd36e45f03fffa98e53819be7e75cb8cd1bcb0705b845939 │ ├── 171857c49d0f5e2ebf623e6cb36a8bcad585ed0c2aa99c87a055df034c1e5848 │ ├── 188c0c94c7c576fff0792aca7ec73d67a2f7f4cb3a6e53a84559337260b36964 │ ├── 3c72a8ed68140139e483fe7368ae4d9651422749e91483557cbd5ecf99a96110 │ ├── 419640447d267f068d2f84a093cb13a56ce77e130877f5b8bdb4294f4a90a84f │ ├── 61e52f862619ab016d3bcfbd78e5c7aaaa1989b4c295e6dbcacddd2d7b93e1f5 │ ├── 6a5697faee43339ef8e33e3839060252392ad99325a48f7c9d7e93c22db4d4cf │ ├── 85defa007a8b33f817a5113210cca4aca6681b721d4b44dc94928c265959d7d5 │ ├── 9dd8e8e549988a3e2c521f27f805b7a03d909d185bb01cdb4a4029e5a6702919 │ ├── a254829d9e55168306fd80a49e02eb015551facee9c444d9dce3b26d19238b82 │ ├── ba13d3bc422b493440f97a8f148d245e1999cb616cb05876edc3ef29e79852f2 │ └── f2dc206a393cd74df3fea6d4c1d3cefe209979e8dbcceb4893ec9eadcc10bc14 └── v2metadata-by-diffid └── sha256 ├── 0c2689e3f9206b1c4adfb16a1976d25bd270755e734588409b31ef29e3e756d6 ├── 2367050c34dd9fd39052c35bf9a930e94a2be7202b33e1f8e64c1f04dd82011e ├── 291f6e44771a7b4399b0c6fb40ab4fe0331ddf76eda11080f052b003d96c7726 ├── 2c8583333eb335ac202e1b798f9078ad0128f34c25a3dfe6f05e6816d3480900 ├── 3fd9df55318470e88a15f423a7d2b532856eb2b481236504bf08669013875de1 ├── 47dde53750b4a8ed24acebe52cf31ad131e73a9611048fc2f92c9b6274ab4bf3 ├── 7a694df0ad6cc5789a937ccd727ac1cda528a1993387bf7cd4f3c375994c54b6 ├── 80580270666742c625aecc56607a806ba343a66a8f5a7fd708e6c4e4c07a3e9b ├── 93e19e6dd56b059a7356aa864f9916185559a56ff18da4b189a3fcc13d3aa0ee ├── ace0eda3e3be35a979cec764a3321b4c7d0b9e4bb3094d20d3ff6782961a8d54 ├── cc9d18e90faad04bc3893cfaa50b7846ee75f48f5b8377a213fa52af2189095c └── e2a648dc6400feb0d24484d83ba5800ed58adbcfdb9986f80d4ae106ac891968