Union File System
Union File System是一種為linux FressBSD和NetBSD操作系統,把其他文件系統聯合到一個聯合掛載點的文件系統服務。
AUSF 時Docker選用的第一種驅動。AUFS具有快速啟動容器、高效利用存儲和內存的優點,直到現在AUFS仍是Docker支持的一種存儲驅動類型。接下來,介紹一下Docker是如何利用AUFS存儲image和container的。
手動實現AUFS
- 建一個文件夾名為aufs
- 在aufs下創建文件夾mnt作為掛載點
- 在aufs下創建container-layer文件夾,創建container-layer.txt 內容為"I am container layer"
- 在aufs下創建四個文件夾分別為 image-layer1 image-layer2 image-layer3 image-layer4
- 在上一條的四個文件夾內分別寫四個文件,分別為image-layer1.txt ... 內容分別為 "I am image layer 1"...
- 把建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
- 現在往mnt 下imagge-layer2.txt里隨便再寫些東西
echo -e "write to layer 2" >>/home/maojiancai/mygo/aufs/mnt/image-layer2.txt
- 查看 mnt 下的image-layer2.txt
maojiancai@bogon:~/mygo/aufs/mnt$ cat image-layer2.txt
I am image layer 2
write to layer 2
- 查看原image-layer2.txt
maojiancai@bogon:~/mygo/aufs$ cat image-layer2/image-layer2.txt
I am image layer 2
==我們可以得出結論mnt下掛載的文件更新了,而原來的文件未改變==
docker 容器也是如此,只有contanier層是可以讀寫的,下層的image 是只讀的,至此我們完成了一個簡單的aufs