初识DOCKER(7)–合成文件系统

什么是合成文件系统?

合成文件系统是一种虚拟文件系统,它可以将两个文件夹中的内容合成一个新的合成文件夹,在该合成文件夹中可以看到先前两个文件夹中的全部内容。用于合成合成文件夹的两个文件夹分为上端文件夹和下端文件夹,一般地,上端文件夹中的同名文件可覆盖下端文件,而对合成后合成文件夹中文件的改动也将反映到上端文件夹。常见的合成文件系统有aufs和overlayfs,前者是由一日本人所开发的,由于代码冗长效率差,因此长期未进入Linux内核,后者经常在嵌入式设备中用于挂载根目录,性能好且有望加入Linux内核。Docker默认采用aufs作为其文件系统驱动,为演示合成文件系统,下面笔者将采用overlayfs做一个演示。

 

首先,笔者建立fstest 文件夹,并在其中建立basefs 、overlay、fsroot和workdir 子文件夹。并在 basefs 中建立类似Unix文件系统的文件夹结构,在 overlay 下建立 data 子文件夹,整个目录如下所示

#tree fstest
fstest
├── basefs
│   ├── bin
│   ├── boot
│   ├── dev
│   ├── etc
│   ├── home
│   ├── lib
│   ├── lib64
│   ├── media                                                blog.nvacg.org版权所有
│   ├── mnt
│   ├── opt
│   ├── proc
│   ├── sbin
│   ├── sys
│   ├── tmp
│   ├── usr
│   └── var
├── overlay
│   └── data
├── rootfs
└── workdir

 

接下去笔者将rootfs作为合成文件夹, basefs作为下级文件夹, overlay作为上级文件夹进行挂载:

#mount -t overlay fstest/overlay -o upperdir=fstest/overlay,lowerdir=fstest/basefs,workdir=fstest/workdir fstest/rootfs                             blog.nvacg.org版权所有

 

再看下rootfs文件夹内的状况

#ls fstest/rootfs
bin   data  etc   lib    media  opt   sbin  tmp  var
boot  dev   home  lib64  mnt    proc  sys   usr

 

可以看到rootfs文件夹中不仅显示了下级文件夹basefs中的文件夹,同时也显示了上级文件夹overlay中所独有的data目录。接下来我们向合成目录rootfs写入一个文件看看。

#touch fstest/rootfs/new
#ls fstest/rootfs                                                       blog.nvacg.org版权所有
bin   data  etc   lib    media  new  proc  sys  usr
boot  dev   home  lib64  mnt    opt  sbin  tmp  var

 

现在合成文件夹里已经有了new这个文件,回头再看上级文件夹overlay

#ls fstest/overlay/
data  new

 

不难发现,对于合成文件夹所做的变更实际是应用到了上级文件夹中。

现在我们将docker的存储驱动由aufs改为overlayfs,然后从centos镜像新建一个实例,并在其根目录新建一个文件new看看

#docker run -it --name main centos
[root@1ac311e2e56a /] #touch new
[root@1ac311e2e56a /] #ls
anaconda-post.log  dev  home  lib64       media  new  proc  run   srv  tmp  var
bin                etc  lib   lost+found  mnt    opt  root  sbin  sys  usr
[root@1ac311e2e56a /] #exit                             blog.nvacg.org版权所有
#docker ps -a
CONTAINER ID    IMAGE    COMMAND    CREATED    STATUS    PORTS      NAMES
1ac311e2e56a    centos:latest    "/bin/bash"   About a minute ago Exited (0)  About a minute ago main

 

现在到docker数据目录的overlay/1ac311e2e56a子目录看下

#ls /data/docker_instance/overlay/1ac311e2e56abe889028682af55f1c9b459be2ef97a8612bb9522401eadc7211/upper/
dev  etc  new  root

可以看到刚才在虚拟环境中建立的文件new

 

 

 


  请注意,本站的所有文章均要求阁下在转载时注明出处和原作者,阁下转载本站文章即表示阁下同意并遵守此规程,除非特别注明转载出处,否则文章即为其发布者所著。本站及文章作者保留文章的著作权并有权在阁下违反上述规程时予以追究。

本文链接地址: 初识DOCKER(7)–合成文件系统

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*