docker 镜像与容器存储目录结构精讲

docker 镜像与容器存储目录结构精讲

很多朋友在初学 docker 的时候非常迷茫,不清楚 docker 是怎样的一种存储方式,并且也不清楚 docker 到底存储在什么地方。其实 docker 的镜像与容器都存储在 /var/lib/docker 下面,那么基于不同的系统又有不同的存储方式,在 ubuntu 下面存储方式为 AUFS;在 Centos 下面存储方式又是 device mapper,下面我们先来看一下 /var/lib/docker 目录,分别有三个阶段,看看在不同阶段都新增了那些东西及镜像与容器存储结构的变化:

环境:
系统:centos 7
内核:3.10.0-229.el7.x86_64
docker 版本: 1.8.2

  • start docker 服务之后目录结构
  • pull images 后目录结构
  • run container 后目录结构

启动docker ,安装完 docker 后执行命令 systemctl start docker.service:

[root@docker-100 docker]# tree ./
./
├── containers
├── devicemapper
│   ├── devicemapper
│   │   ├── data
│   │   └── metadata
│   └── metadata
│       ├── base
│       ├── deviceset-metadata
│       └── transaction-metadata
├── graph
├── linkgraph.db
├── repositories-devicemapper
├── tmp
├── trust
└── volumes

前面我们说过,centos 下面 docker 使用 devicemapper 的存储方式,所以在 /var/lib/docker 下面出现了 devicemapper 目录

/var/lib/docker/devicemapper/devicemapper/ 目录下有两个文件:
/var/lib/docker/devicemapper/devicemapper/data
/var/lib/docker/devicemapper/devicemapper/metadata
它们是用来存储对应的存储池和相关的元数据。

/var/lib/docker/devicemapper/metadara/ 目录下有三个文件:
/var/lib/docker/devicemapper/metadata/base
/var/lib/docker/devicemapper/metadata/transaction-metadata
/var/lib/docker/devicemapper/metadata/deviceset-metadata
它们则是用来存放前面元数据的id、大小、以及UUID等信息。

当然,现在也存在几个空目录,我们等下来说,例如:
/var/lib/docker/containers
/var/lib/docker/devicemapper
/var/lib/docker/graph
/var/lib/docker/tmp
/var/lib/docker/trust
/var/lib/docker/volumes

还有一个文件,我们等下来说,先来了解下大致的目录结构:
/var/lib/docker/repositories-devicemapper


现在我们 docker pull centos 一个镜像下来 docker images 查看。接着再查看目录变化,对比之前的目录结构及文件变化:

[root@docker-100 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              latest              ce20c473cd8a        8 weeks ago         172.3 MB
[root@docker-100 docker]# tree ./
./
├── containers
├── devicemapper
│   ├── devicemapper
│   │   ├── data
│   │   └── metadata
│   ├── metadata
│   │   ├── 168a69b6220279e6d5bd8dafd2edf71434a08e32b60a7060f7a705f64857169d
│   │   ├── 4234bfdd88f8ed2bc4607bd2ebba2d41d61e2693ad0d184e7b05e1b57f8b8b33
│   │   ├── 47d44cb6f252ea4f6aecf8a447972de5d9f9f2e2bec549a2f1d8f92557f4d05a
│   │   ├── 812e9d9d677f15c39277b2edc8f9bc07354c899483409bb07d1c13c2b9c33ec8
│   │   ├── base
│   │   ├── ce20c473cd8ac1fab6601529ce6a075743f2cf7a8f4cfed2216f8cfcb53bfc4e
│   │   ├── deviceset-metadata
│   │   └── transaction-metadata
│   └── mnt
│       ├── 168a69b6220279e6d5bd8dafd2edf71434a08e32b60a7060f7a705f64857169d
│       ├── 4234bfdd88f8ed2bc4607bd2ebba2d41d61e2693ad0d184e7b05e1b57f8b8b33
│       ├── 47d44cb6f252ea4f6aecf8a447972de5d9f9f2e2bec549a2f1d8f92557f4d05a
│       ├── 812e9d9d677f15c39277b2edc8f9bc07354c899483409bb07d1c13c2b9c33ec8
│       └── ce20c473cd8ac1fab6601529ce6a075743f2cf7a8f4cfed2216f8cfcb53bfc4e
├── graph
│   ├── 168a69b6220279e6d5bd8dafd2edf71434a08e32b60a7060f7a705f64857169d
│   │   ├── json
│   │   ├── layersize
│   │   └── tar-data.json.gz
│   ├── 4234bfdd88f8ed2bc4607bd2ebba2d41d61e2693ad0d184e7b05e1b57f8b8b33
│   │   ├── json
│   │   ├── layersize
│   │   └── tar-data.json.gz
│   ├── 47d44cb6f252ea4f6aecf8a447972de5d9f9f2e2bec549a2f1d8f92557f4d05a
│   │   ├── json
│   │   ├── layersize
│   │   └── tar-data.json.gz
│   ├── 812e9d9d677f15c39277b2edc8f9bc07354c899483409bb07d1c13c2b9c33ec8
│   │   ├── json
│   │   ├── layersize
│   │   └── tar-data.json.gz
│   ├── ce20c473cd8ac1fab6601529ce6a075743f2cf7a8f4cfed2216f8cfcb53bfc4e
│   │   ├── json
│   │   ├── layersize
│   │   └── tar-data.json.gz
│   └── _tmp
├── linkgraph.db
├── repositories-devicemapper
├── tmp
├── trust
└── volumes

20 directories, 27 files

当我 pull 一个镜像之后,子目录中增加了许多文件,最先看到的变化是在三个文件夹下面:
/var/lib/docker/devicemapper/medata/
/var/lib/docker/devicemapper/mnt/
/var/lib/docker/graph/

好,在这之前呢,我们先来看一下 docker 查看镜像中间件命令,docker images -a 显示所有图像(默认隐藏中间图像),我们在下图中可以清楚的看到,IMAGFE ID 分别为下图中的内容,也就是说,images centos 被下面四个中间件所支持:

centos ce20c473cd8a
<none> 4234bfdd88f8
<none> 812e9d9d677f
<none> 168a69b62202
<none> 47d44cb6f252
[root@docker-100 metadata]# docker images -a
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              latest              ce20c473cd8a        8 weeks ago         172.3 MB
<none>              <none>              4234bfdd88f8        8 weeks ago         172.3 MB
<none>              <none>              812e9d9d677f        8 weeks ago         172.3 MB
<none>              <none>              168a69b62202        8 weeks ago         172.3 MB
<none>              <none>              47d44cb6f252        3 months ago        0 B

我们查看下 /var/lib/docker/devicemapper/metadata 目录下的内容

[root@docker-100 metadata]# cat base 
{
    "device_id":1,"size":107374182400,"transaction_id":3,&#
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值