Docker文件系统的分层与隔离_第1页
Docker文件系统的分层与隔离_第2页
Docker文件系统的分层与隔离_第3页
Docker文件系统的分层与隔离_第4页
Docker文件系统的分层与隔离_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Docker文件系统的分层与隔离M老师:Docker的很多特性都表现在它所使用的文件系统上,比如大家都知道 docker的文件系统是分层的,所以它可以快速迭代,可以回滚。这个回滚机制 跟github很像,每次提交的时候都会有一个id ,回滚就是跟据这个id来操作 的。M老师:Docker所支捋的文件系统有以下几种:Aufs、device map per、btrfs 和Vfs ,其中前三种是联合文件系统,可以支持分层,VFS不支按 平时用的最 多的是 aufs 和 devicemapper。M 老师:先介绍一下 Aufs f Aufs(advanced multi layered unifica

2、tion filesystem),直译过来就是高级分层联合文件系统,做为一种Union FS ,它支 持将不同的目录挂载到同一个虚拟文件系统下。M老师:这个怎么理解呢,通过一条命令我们来看一下:mount -t aufs -o br=/tmp/dirl=ro:/tmp/dir2=rw none /tmp/newfsM老师:大家有条件的可以一起做下实验,方便理解,-o指定mount传递给 文件系统的参数;br指定需要挂载的文件夹,这里包括dirl和dir2 ; ro/rw指 定文件的权限只读和可读写;none这里是挂载的设备,而没有设备用none表 示。M老师:为什么要有只读和可读写两种呢,因为

3、docker在启动容器的时候就会 用到这两种,而上面这个例子是模拟这个docker文件系统模型。问:启动docker的时候,对硬盘使用只读,意义在于什么?答:这个问题很好,一个image可以启动多个container,这时候会有一个问 题,如果每个container对大家共有的部分都有可写的权限,就会出问题。所以 docker启动的时候会加载镜像的文件系统那层是只读的,然后每个contianer 获取自己的可读写的层,如果container要修改只读层的文件,那么该文件就会 从只读层提取到读写层。只读层的文件就被读写层的文件覆盖了,但只读层的那 个文件依然存在这个就实现了文件系统上的隔离。问:

4、就像我们写程序抵触共享的东西不变,只是利用这个共性来底层共享?答:是的。问:加那个none是干什么用的?答:none这里没有设备,用none表示,其实是没有意义的。但命令要求要有个设备,这条命令中设备是none问:这个命令是在容器里执行的吗?还是在宿主机?答:容器。M老师:继续咱们的分享,刚才实验的结果是什么样子呢,就是把/tmp/dirl 和/tmp/di2合并之后挂载到/tmp/newfs ,如果这时在/tmp/dirl下创建一 个文件a , /tmp/dir2下创建一个文件b贝在/tmp/newfs会看到a,b这两 个文件,这就是联合,并且a文件是只读的。M老师:如果有相同的文件则以先挂

5、载的为准,后面挂载的操作会被忽略掉。 大家可以想像一下,我每做一次操作都相当于去挂载一个新的目录,这样所有的 操作就保存下来了。当然实际情况并不是每次操作都去挂载。当container发 生改变的时候,并且我提交commit才会重新挂载一层。问:比如mkdir test这也算是重新挂载了一层?答:docker有一个命令docker commit,扌丸行这个的时候会。M老师:可能还会有一些不理解,下面用实际的docker镜像来举个例子。大 家启动一个container之后,执行docker save ,可以把container保存成镜 像。例如:docker savecloudjia nkon

6、gbao:01.tarcloudjia nkon gbao:01其中 cloudiankongbao:01.tar 是镜像的名字 后面的 cloudJiankongbao:01 是这个container的ID ,可以看到,保存下来的是tar包。不是.iso文件八_人 M老师:镜像解压之后是什么呢,我们来看一下:Is.a005304e4e74cl541988d3dlabbl70e338cld45daee7151f8e82f8460634d329d9bde94c518al6a886514758b6b4431200145ecd58e30c5633ac3c02 56544d77flbl0cd84249

7、8c23d206ee0cbeaa9de8d2ae09ff3c7af2723a9e337a69 65d639fb9cc58bde0c0a8fe53e6fdd23898e45041783f2d7869d939d7364f57 77fde6f里面有四个目录,其实分别是4个docker的ID,每次使用docker commit提 交对docker的修改之后就会产生一个新的id ,就是通过这个ID实现对镜像的 回滚。M老师:这4个目录之间是有关系的。这个关系可以通过docker image -tree 来查看。docker images treeflbl0cd84249 Virtual Size: 0

8、Bfb9cc58bde0c Virtual Size: 203.1 MBL-a005304e4e74 Virtual Size: 203.1 MBL 一 d9bde94c518a Virtual Size: 1.957 GB Tags: cloudjia nkon gbao:01M老师:每个目录下有json layer.tar VERSION这三个文件,我们现在只研 究他们的结构,所以只看layer.tar这个文件。M老师:我们到一个目录下把layer.tar解压一下 dfb9cc58bde0c0a8fe53e6fdd23898e45041783f2d7869d939d7364f5 777fd

9、e6f;tar -xflayer.tar;lsIsfb9cc58bde0c0a8fe53e6fdd23898e45041783f2d7869d939d7364f5777fde6f/binetcjsonliblost+fo und mntpocsbinsvtmpvadevhomelayer.tar Iib64 mediaopt root selinux sys usrVERSION问:为什么会提交四次?答:提交4次是我们自己提交的.M老师:在使用docker的过程中我们需要保存自己的修改,docker commit执 行完之后就把container中的容回写到镜像中了 z就相当于加了一层文件系统

10、,每次提交后就生成了一个新的镜像。4个ID是4次提交的镜像的ID ,这4个ID其实相当于一个镜像的4个tag。我们再看一下4个镜像ID的系统:flbl0cd84249这个镜像是初始镜像f大小为0docker images treeLflbl0cd84249 Virtual Size: 6 BJfb%c58bdeec Virtual Size: 263.1 MB a005S64e4e74 Virtual Size: 283.1dSbdeSMcSlSa Virtual Size: 1.957 GB Tags.: c 1 oudiJiankongbao:&1fb9cc58bde0c这个镜像是在flb

11、l0cd84249基础上创建新的镜像;a005304e4e74是以fb9cc58bde0c为基础创建新的镜像z是树状继承的关系;M老师:我们再看一下不同ID目录下的bin目录。Isa005304e4e74cl541988d3dlabbl70e338cld45daee7151f8e82f8460634d329/bin/gtar tar a005304e4e74只有两个文件,fb9cc58bde0c包括了大部分bin下的文件, 对应的场景是fb9cc58bde0c,是装好操作系统,然后我又装了 ta这个工具。 docker commit 提交之后 z 就是 a005304e4eo心cpio|unz

12、ip1(Wountpolntaukeve川login fatvdddpcalcUbLknwi ntevcatdfdptablastedlrnLsdoealnnaw化”do昭findiptablos xl-1.4.7McnodP8OnitoialnruncflnihntUHffctCfpPS%chomdcraiinnficlinkoracpecnoInoontP*ifWccMtxJceceaBft53e6(23898c45M1783f2d?B69(i33?d7,3(4f5r77fClc6f/bln/tert itty严 *t”yttower trccpotn Vjcwthfti问:可以认为fb9

13、cc58bde0c是一个最小化的OS答:可以这么理解。M老师:最后简单说一下devicemapper,回到最开始说的,docker支持多种 文件系统。devicemapper 是利用了 Snapshot 和 Thinly-ProvisionedSnapshot两种原理,将多个快照挂在同一个卷下从而实现文件系统的分层。这 里的快照技术其实就是vm中的快照。M老师:刚才说的autofs是将不同的目录挂到一个虚拟目录,devicemapper 就是把多个快照挂载到同一个卷下,不过使用devicemapper的话,个 container的大小最大只能是10G ,启动docker daemon时用参数-s指定: docker -d -s devicemapperM老师:当容器基于镜像启动之后,每个容器都会获得自己的写读可写的文件 系统层。原镜像的那部分文件系统是只读的,从而实现每个容器的在文件系统上 的隔离。问:autofs 最大一个containei是多大?答:没有限制,直到物理服务器没有资源,但通常不会将数据库和LOG保存在 镜像中,所以也不

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论