多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
``` [root@iZbp1bum6107bp8mgzkeunZ overlay2]# pwd /var/lib/docker/overlay2 [root@iZbp1bum6107bp8mgzkeunZ overlay2]# ls 0411df6a4bb11286cc6606b3d29b7c5fe1edc5099bbcf70f81f968bb88c1a0c8 55db195f20f5411491220a22b55b01d876f27a43805e9ec1a0909cb82622e2aa a7bc1f15e92ce8926659fc1760c5672f2888a39a34c5b38845df7315425f98d3-init 0c959e3ba58318d9f7492825314053d5e944d329c484939bbdca2328e26c151b 564517e1e0536375bd317a583e41a0ead36e6222f304c8d0299ebd622f212766 aba555ae0cdb873c0f4bed44f5320ec91e4e04d244acf537bc415489b8befcc2 0c959e3ba58318d9f7492825314053d5e944d329c484939bbdca2328e26c151b-init 5bb64b90d73673392a58cfabc0df189cd3174025ddcd61096aad156c980cc132 aba555ae0cdb873c0f4bed44f5320ec91e4e04d244acf537bc415489b8befcc2-init 0db62e2f978f8300dabcc220dbc210cdb280494811e6fae92b796b6dfa0b394a ``` * “l”目录 目录里边是软连接指向 /overlay2/CacheID 目录下的 diff目录,避免挂载命令超出长度 ![](https://img.kancloud.cn/67/6d/676de5a83a93b1aa2f766d001fdcb6d2_1701x275.png) * 容器层存储目录 overlay2目录下其他以CacheID为名的目录,存储的是镜像和容器各层的实际内容。其中带`-init`的目录是只读的;没有init的容器目录是容器的读写目录,容器中写入时候会把文件拷贝进来(读操作直接在每层操作,不需拷贝) 这些目录在容器创建时生成,容器删除时也随着删除。 验证如下:当前容器总数为31,在`/var/lib/docker/overlay2`目录下的确存在31个`cache-init`目录以及对应的`cache`但无`-init`的目录,说明创建过的容器都会在此目录下新增对应的数据文件。 ![](https://img.kancloud.cn/d5/63/d56334b3952c15a0de3892520fb17777_1676x644.png) * 镜像层存储目录 只有一个以CacheID命名的目录(即没有对应`CacheID-init`目录的) * CacheID目录结构 ![](https://img.kancloud.cn/67/f8/67f87894c08bfdc00dc37d81e44687d5_1186x49.png) * diff目录:容器层的改动内容 * link 文件:记录该存储对应的镜像层 * lower 文件:记录该镜像层对应的底层镜像层 * work 目录:文件系统的工作基础目录,挂载后内容会被清空,且在使用过程中其内容用户不可见 <br> **示例1:通过docker overlay2 目录名查找出对应的容器** ``` docker ps -a -q | xargs docker inspect --format '{{.State.Pid}}, {{.Id}}, {{.Name}}, {{.GraphDriver.Data.WorkDir}}' | grep cacheID ``` ![](https://img.kancloud.cn/f5/5b/f55bf891fa38b3df4f9228b887df9181_1878x648.png)<br> **示例2:查看容器的overlay2 存储目录** ``` docker inspect --format '{{.State.Pid}}, {{.Id}}, {{.Name}}, {{.GraphDriver.Data.WorkDir}}' 容器ID ``` ![](https://img.kancloud.cn/46/8a/468a2857e5c766b2c2308cf2a4c48d19_1567x46.png) <br> **示例3:进入容器,在home下写一个hello.txt的文件,验证宿主机的docker容器overlay2目录下的diff目录是否有对应新增** 1. 当前正在运行的nginx容器,根据容器ID查询该容器的存储目录 ![](https://img.kancloud.cn/2d/5b/2d5bb834dc3bb4b18f69ccf7fdc86911_1606x122.png) 2. 进入该目录后,发现以下目录 ![](https://img.kancloud.cn/b6/88/b6884482b7d8e73e6ecc8273fd22dbf1_1320x97.png) 3. 进入容器,创建/home/hello.txt文件后,检查存储目录,发现存储目录下的diff目录新增了home/hello.txt文件;同时检查CacheID-init目录下的文件,发现并没有新增。因此,也验证了`-init`的目录是只读的,没有`-init`的目录才是容器的读写目录。 ![](https://img.kancloud.cn/9b/09/9b09267b979b5e283c47362cbd972ba8_1551x269.png)