(3)UFS

Union File System

Union File System是一种为linux FressBSD和NetBSD操作系统,把其他文件系统联合到一个联合挂载点的文件系统服务。

AUSF 时Docker选用的第一种驱动。AUFS具有快速启动容器、高效利用存储和内存的优点,直到现在AUFS仍是Docker支持的一种存储驱动类型。接下来,介绍一下Docker是如何利用AUFS存储image和container的。

手动实现AUFS

  1. 建一个文件夹名为aufs
  2. 在aufs下创建文件夹mnt作为挂载点
  3. 在aufs下创建container-layer文件夹,创建container-layer.txt 内容为"I am container layer"
  4. 在aufs下创建四个文件夹分别为 image-layer1 image-layer2 image-layer3 image-layer4
  5. 在上一条的四个文件夹内分别写四个文件,分别为image-layer1.txt ... 内容分别为 "I am image layer 1"...
  6. 把建container-layer和4个image-layer用aufse的方式挂载到mnt(默认情况下 dirs 指定的左边第一个目录是read-write权限,其他的都是read-only)
maojiancai@bogon:~/mygo/aufs$ tree
.
├── container-layer
│   └── container-layer.txt
├── image-layer1
│   └── imagge-layer1.txt
├── image-layer2
│   └── image-layer2.txt
├── image-layer3
│   └── image-layer3.txt
├── image-layer4
│   └── image-layer4.txt
└── mnt
6 directories, 5 files

挂载
sudo mount -t aufs -o dirs=./container-layer:./image-layer4:./image-layer3:./image-layer2:./image-layer1 none ./mnt

.
├── container-layer
│   └── container-layer.txt
├── image-layer1
│   └── imagge-layer1.txt
├── image-layer2
│   └── image-layer2.txt
├── image-layer3
│   └── image-layer3.txt
├── image-layer4
│   └── image-layer4.txt
└── mnt
    ├── container-layer.txt
    ├── image-layer2.txt
    ├── image-layer3.txt
    ├── image-layer4.txt
    └── imagge-layer1.txt

查看文件读写权限,如第六步所说,只有container-layer 有读写权限

cat /sys/fs/aufs/si_b9dfd42676b40eb5/*

(si_b9dfd42676b40eb5 为系统为此aufs新建的)

maojiancai@bogon:/$ cat /sys/fs/aufs/si_b9dfd42676b40eb5/*
/home/maojiancai/mygo/aufs/container-layer=rw
/home/maojiancai/mygo/aufs/image-layer4=ro
/home/maojiancai/mygo/aufs/image-layer3=ro
/home/maojiancai/mygo/aufs/image-layer2=ro
/home/maojiancai/mygo/aufs/image-layer1=ro
64
65
66
67
68
/home/maojiancai/mygo/aufs/container-layer/.aufs.xino
  1. 现在往mnt 下imagge-layer2.txt里随便再写些东西

echo -e "write to layer 2" >>/home/maojiancai/mygo/aufs/mnt/image-layer2.txt

  1. 查看 mnt 下的image-layer2.txt
maojiancai@bogon:~/mygo/aufs/mnt$ cat image-layer2.txt
I am image layer 2
write to layer 2
  1. 查看原image-layer2.txt
maojiancai@bogon:~/mygo/aufs$ cat image-layer2/image-layer2.txt
I am image layer 2

==我们可以得出结论mnt下挂载的文件更新了,而原来的文件未改变==

docker 容器也是如此,只有contanier层是可以读写的,下层的image 是只读的,至此我们完成了一个简单的aufs

你可能感兴趣的:((3)UFS)