docker学习——1,基于overlay2存储驱动的理解

  • 首先我一直误解一个东西(很蠢),就是我在读《docker容器实战》这本书的时候,看见书上说“容器在退出后并不会更改镜像,如果要持久化数据,就要通过commit保存镜像”,我最开始还以为如果对容器进行操作,退出时做的修改就没有了。后来发现退出容器后在进入停止的容器,做的修改任然存在,只不过是在容器中保存,而没有在以镜像的方式保存。
  • 在docker不是特别老的版本中(1.10以后),镜像的ID与目录的
  • 我用的是overlay2(默认)的存储驱动,所以容器存储在/var/lib/docker/overlay2目录下,可以看见这个目录有一堆名字很长的文件夹。而且这些和我们的容器的名字和镜像的名字都不一样。
  • 下面用一些例子来加深对docker容器技术的理解

  • 首先启动一个容器
  • 这是我们可以看到/var/lib/docker/overlay2目录下,多了一个名字为f7bcdfc90910~~~~~的文件夹

                                                                               

  • 在/var/lib/docker/image/overlay2/layerdb/mounts/目录下也存在一个同样名字的文件夹     

                                                        

  • mount-id的文件内容如下:

                            

  • 这一串字符就是表示了我们刚才创建的容器的目录,这个目录在/var/lib/docker/overlay2下,这里目录里的内容是

                                                                 

  • 其中merged是容器的挂载点,(从字面上比较好理解,就是合并之后的意思),diff目录是容器的可读可写层,初始为空,下面是merged、容器层(upperdir)、镜像层(lowerdir)之间的关系。
  • link文件的内容如下

                                   

  • 这个对应了/var/lib/docker/overlay2/l   文件夹下的目录下对应的文件夹名称。据说他保存了镜像层的短标识,用于解决mount参数中长字符超过页大小限制的问题。
  • 下面在根目录下创建一个123132123的文件,内容为history             

               

  • 这时再查看diff文件夹和merged文件夹,就能发现多了个文件,其实这两个文件就是同一个,因为diff(可读写层)是挂载到merged目录中的。可以直接手动在diff文件中新建一个文件,再去merged中查看验证一下。

                                          

                                     

  • 验证一下docker的写时复制(其实上面的那个例子就有点意思了)
  • 我们更新下系统(这时候会在diff目录多出一堆东西,多出来的东西就是更新系统是对镜像的改变),然后下载个nano编辑器,对/etc/shadow文件进行改变,在最后一行加入注释:this is lp,保存——》退出。  

                              

这时候看diff目录下,多了一堆东西,看diff目录下有个/etc/shadow文件,打开看里面的内容和我们修改的一样。  

                              

  • 然后查看merged目录下的/etc/shadow文件,可以发现与上面文件的内容一样,这也验证了我们前面说的merged挂在的方式,也就是如果容器层与镜像层有相同文件时,容器层的文件会覆盖镜像层的文件。实现修改的作用,这就是写时复制。
  • 另外/etc/lib/docker的container目录等其他目录我还不是很理解,如果有人知道,可以一起分享,共同学习,共同进步。哈哈哈哈
    本文知识介绍了下,我个人的对overlay2存储驱动的理解,这中存储驱动也是后来docker采取的默认驱动方式,正好刚学到这,写一点以共分享,自己以后忘了,也可以看看。可能文中有不对的地方,望大家一定指出,多谢^_^

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值