其他分享
首页 > 其他分享> > Docker基础 文件系统之AUFS

Docker基础 文件系统之AUFS

作者:互联网

                     
 

为了更好的理解docker,除了namespace和cgroups之外,在docker中如何进行存储文件也是需要进行进一步理解的。在docker中叫做storage driver,在本文中将会介绍一下docker最早支持的storage driver的AUFS,并在ubuntu上简单模拟AUFS是如何工作的。

Storage driver

 

docker除了支持AUFS,还支持DeviceMapper等多种storage driver。

             
StorageDriver
OverlayFS: overlay or overlay2
AUFS   : aufs
Btrfs  : btrfs
Device Mapper:     devicemapper
VFS    : vfs
ZFS    : zfs

什么是AUFS

 

AUFS是一种Union File System, 它是Docker最早支持的storage driver。因为使用的时间也较长了,虽然还是不太习惯这个所谓的长的概念,docker从最初只支持AUFS一种,目前已经到支持上面6种FS,成长的速度飞快。最初使用docker的实践者们已经在实际环境中开始使用AUFS了,而且也有较强的社区支持。

Linux的文件系统

Linux的文件系统一般由bootfs和rootfs组成。

这里写图片描述

           
类型说明
bootfsbootfs主要用于引导和加载内核,为什么和filesystem有关呢,在引导之前需要mount文件系统,kernel加载之后就可以功成身退了。在作linux的系统引导盘或者进行恢复的时候,你能清晰地看到这一点,在前面其他的文章中已经有过讲解,不再赘述。
rootfs典型的linux启动之后标准的/dev /proc /bin /etc /usr/ /tmp等等都被包含在rootfs中
 

简单总结为bootfs在用linux的时候不出问题是意识不到的,rootfs在linux启动之后我们无时无刻不在与之打交道。

AUFS的特点

 

简单的来说,AUFS能将一台机器上的多个目录或文件,以联合的方式提供统一视图进行管理。下面是它的一些特点

AUFS在docker中的使用

 

下面这张图显示了ubuntu的镜像是如何用AUFS联合到一起的。

这里写图片描述

 

AUFS把每个目录都作为一个AUFS branch,整整齐齐的垛在一起,在最上面提供了一个统一的视图union mount point进行管理。

Ubuntu下AUFS的演示

演示用ubuntu版本

root@ubuntu:~# uname -aLinux ubuntu 4.4.0-31-generic #50-Ubuntu SMP Wed Jul 13 00:07:12 UTC 2016 x86_64 x86_64 x86_64 GNU/Linuxroot@ubuntu:~#
  • 1
  • 2
  • 3

事前准备

 

准备联合用的目录bootfs

root@ubuntu:~# mkdir -p /tmp/testrootfs/etc /tmp/testrootfs/bin /tmp/testrootfs/tmp /tmp/testrootfs/procroot@ubuntu:~#
  • 1
  • 2
root@ubuntu:~# mkdir -p /tmp/testaufs/readonlydirroot@ubuntu:~# mkdir -p /tmp/testaufs/readwritedir/root@ubuntu:~# touch /tmp/testaufs/readonlydir/readonlyfile.txtroot@ubuntu:~# touch /tmp/testaufs/readwritedir/readwritefile.txtroot@ubuntu:~#
  • 1
  • 2
  • 3
  • 4
  • 5
 

准备挂载点

root@ubuntu:~# mkdir -p /tmp/aufsmnt
  • 1

挂载点事前确认

root@ubuntu:~# ll /tmp/aufsmnttotal 8drwxr-xr-x  2 root root 4096 Sep 22 09:30 ./drwxrwxrwt 17 root root 4096 Sep 22 09:30 ../root@ubuntu:~#
  • 1
  • 2
  • 3
  • 4
  • 5

挂载

 

使用AUFS进行挂载

root@ubuntu:/# mount -t aufs -o br=/tmp/testaufs/readonlydir=ro:/tmp/testrootfs=ro:/tmp/testaufs/readwritedir/=rw none /tmp/aufsmntroot@ubuntu:/#
  • 1
  • 2
                       
OptionOption说明
-tfilesystem类型
-omount传递给文件系统的参数
br挂载对象的文件夹
ro/rw指定文件的权限只读和可读写
device没有设备所以用none表示

挂载后确认

total 24drwxr-xr-x  8 root root 4096 Sep 22 09:29 ./drwxrwxrwt 17 root root 4096 Sep 22 09:30 ../drwxr-xr-x  2 root root 4096 Sep 22 09:26 bin/drwxr-xr-x  2 root root 4096 Sep 22 09:26 etc/drwxr-xr-x  2 root root 4096 Sep 22 09:26 proc/-rw-r--r--  1 root root    0 Sep 22 09:29 readonlyfile.txt-rw-r--r--  1 root root    0 Sep 22 09:29 readwritefile.txtdrwxr-xr-x  2 root root 4096 Sep 22 09:26 tmp/root@ubuntu:/#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

确认只读

root@ubuntu:/# echo "hello world" >/tmp/aufsmnt/readonlyfile.txt-su: /tmp/aufsmnt/readonlyfile.txt: Read-only file systemroot@ubuntu:/#
  • 1
  • 2
  • 3
 

ro方式的文件,是不能写的

确认可写

root@ubuntu:/# echo "hello world" > /tmp/aufsmnt/readwritefile.txtroot@ubuntu:/# cat /tmp/aufsmnt/readwritefile.txthello worldroot@ubuntu:/#
  • 1
  • 2
  • 3
  • 4
 

rw方式的文件,是可写的

   

耐着性子看完本篇之后,结合前面的一些namespace和cgroups的例子,再结合busybox这把小巧的武器,是不是突然发现只用linux内核功能也能做到docker雏形的特性了。虽然重复造轮子不是我们的目的,研究一下人家轮子的原理能拆能装才是一个蓝领工人应有的技能。

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

标签:tmp,22,09,文件系统,ubuntu,Docker,AUFS,root
来源: https://blog.csdn.net/qq_43679903/article/details/87638635