1. 程式人生 > >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組成。

這裡寫圖片描述

型別 說明
bootfs bootfs主要用於引導和載入核心,為什麼和filesystem有關呢,在引導之前需要mount檔案系統,kernel載入之後就可以功成身退了。在作linux的系統引導盤或者進行恢復的時候,你能清晰地看到這一點,在前面其他的文章中已經有過講解,不再贅述。
rootfs 典型的linux啟動之後標準的/dev /proc /bin /etc /usr/ /tmp等等都被包含在rootfs中

簡單總結為bootfs在用linux的時候不出問題是意識不到的,rootfs在linux啟動之後我們無時無刻不在與之打交道。

AUFS的特點

簡單的來說,AUFS能將一臺機器上的多個目錄或檔案,以聯合的方式提供統一檢視進行管理。下面是它的一些特點

  • 最早docker所支援的storage driver
  • 使用這種方式,container啟動速度較快
  • 儲存和記憶體的使用效率較高
  • 支援COW(copy-on-write)
  • 所有的檔案和目錄以及掛載點都必須在同一臺機器上
  • AUFS遲遲不能加入到linux核心主線之中,目前流行的髮型版只有ubuntu支援AUFS
  • docker的layer較深時效率較為低下
  • 因為AUFS是檔案級別的動作方式,單個檔案很大時,效能和效率不是特別理想

AUFS在docker中的使用

下面這張圖顯示了ubuntu的映象是如何用AUFS聯合到一起的。

這裡寫圖片描述

AUFS把每個目錄都作為一個AUFS branch,整整齊齊的垛在一起,在最上面提供了一個統一的檢視union mount point進行管理。

Ubuntu下AUFS的演示

演示用ubuntu版本

root@ubuntu:~# uname -a
Linux ubuntu 4.4.0-31-generic #50-Ubuntu SMP Wed Jul 13 00:07:12 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
root@ubuntu:~#

事前準備

準備聯合用的目錄bootfs

root@ubuntu:~# mkdir -p /tmp/testrootfs/etc /tmp/testrootfs/bin /tmp/testrootfs/tmp /tmp/testrootfs/proc
root@ubuntu:~#
root@ubuntu:~# mkdir -p /tmp/testaufs/readonlydir
root@ubuntu:~# mkdir -p /tmp/testaufs/readwritedir/
root@ubuntu:~# touch /tmp/testaufs/readonlydir/readonlyfile.txt
root@ubuntu:~# touch /tmp/testaufs/readwritedir/readwritefile.txt
root@ubuntu:~#

準備掛載點

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

掛載點事前確認

root@ubuntu:~# ll /tmp/aufsmnt
total 8
drwxr-xr-x  2 root root 4096 Sep 22 09:30 ./
drwxrwxrwt 17 root root 4096 Sep 22 09:30 ../
root@ubuntu:~#

掛載

使用AUFS進行掛載

root@ubuntu:/# mount -t aufs -o br=/tmp/testaufs/readonlydir=ro:/tmp/testrootfs=ro:/tmp/testaufs/readwritedir/=rw none /tmp/aufsmnt
root@ubuntu:/#
Option Option說明
-t filesystem型別
-o mount傳遞給檔案系統的引數
br 掛載物件的資料夾
ro/rw 指定檔案的許可權只讀和可讀寫
device 沒有裝置所以用none表示

掛載後確認

total 24
drwxr-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.txt
drwxr-xr-x  2 root root 4096 Sep 22 09:26 tmp/
[email protected]:/#

確認只讀

root@ubuntu:/# echo "hello world" >/tmp/aufsmnt/readonlyfile.txt
-su: /tmp/aufsmnt/readonlyfile.txt: Read-only file system
root@ubuntu:/#

ro方式的檔案,是不能寫的

確認可寫

root@ubuntu:/# echo "hello world" > /tmp/aufsmnt/readwritefile.txt
root@ubuntu:/# cat /tmp/aufsmnt/readwritefile.txt
hello world
root@ubuntu:/#

rw方式的檔案,是可寫的

耐著性子看完本篇之後,結合前面的一些namespace和cgroups的例子,再結合busybox這把小巧的武器,是不是突然發現只用linux核心功能也能做到docker雛形的特性了。雖然重複造輪子不是我們的目的,研究一下人家輪子的原理能拆能裝才是一個藍領工人應有的技能。

相關推薦

Docker基礎檔案系統AUFS

為了更好的理解docker,除了namespace和cgroups之外,在docker中如何進行儲存檔案也是需要進行進一步理解的。在docker中叫做storage driver,在本文中將會介紹

Docker基礎 文件系統AUFS

pac 引導 ted .html 必須 edi number 特性 etc 為了更好的理解docker,除了namespace和cgroups之外,在docker中如何進行存儲文件也是需要進行進一步理解的。在docker中叫做storage driver,在本文中將會介

Docker基礎 檔案系統AUFS

為了更好的理解docker,除了namespace和cgroups之外,在docker中如何進行儲存檔案也是需要進行進一步理解的。在docker中叫做storage driver,在本文中將會介紹一下docker最早支援的storage driver的AUFS,並在ubuntu上簡單模擬AUFS

系統架構設計師 檔案系統索引節點

PS:下面的講解,基於Linux/Unix         索引節點,其英文為 Inode,是 Index Node 的縮寫。         儲存於檔案系統上的任何檔案都可以用索引節點來表示。        檔案系統主要分為兩部分,一部分為元資料(metadata),

Linux檔案系統aufs

aufs的全稱是advanced multi-layered unification filesystem,主要功能是把多個資料夾的內容合併到一起,提供一個統一的檢視,主要用於各個Linux發行版的livecd中,以及docker裡面用來組織image。 據說由於auf

docker基礎Aufs儲存驅動設定

本文用於記錄ubuntu 17.10下docker 17.12.1-ce版本下overlay2的設定到aufs的方法。在Ubuntu 16.04以及更新的版本中,Linux核心引入了OverlayFS的支援,而且Docker CE也開始使用overlay2作為預設的儲存驅動,

【FastDFS分散式檔案系統二】FastDFS小檔案上傳效能測試及Python客戶端上傳操作

  由於要對比swift上傳小檔案以及fdfs上傳小檔案的效能,故做效能測試。 1.1 測試環境: FastDFS叢集的搭建方法:【FastDFS分散式檔案系統之一】:搭建、部署、配置 tracker server1:node2 tracker server2:node3

小甲魚《零基礎學習Python》課後筆記(三十)檔案系統——介紹一個高大上的東西

動動手 0.編寫一個程式,統計當前目錄下每個檔案型別的檔案數,程式實現如圖: 程式碼如下: import os filename_list = os.listdir(os.curdir) filetype_dict = dict() for each_fi

docker基礎私庫系列再探Harbor(7) 使用restapi對專案進行增刪改查

在上篇文章中介紹了Harbor的RestApi,這篇具體以專案的增刪改查作為例子來進行說明。 前提假定 假定Harbor運行於本機localhost的32031埠 專案查詢 查詢全部專案 curl -X GET “http://localhost:32031/

python3基礎檔案操作

相對路徑和絕對路徑 相對路徑:顧名思義就是相對於當前檔案的路徑。網頁中一般表示路徑使用這個方法。 絕對路徑:絕對路徑就是主頁上的檔案或目錄在硬碟上真正的路徑。 比如 c:/apache/cgi-bin 下的,那麼 c:/apache/cgi-bin就是cgi-bin目錄的絕對路徑 檔

linux 檔案系統superblock

為了實際測試這個pagecache和對裸盤操作的區別,我一不小心敲錯命令,將一個磁碟的super_block給抹掉了,全是0, dd if =/dev/zero of=/dev/sda2 bs=4096 count=1 seek=2234789 2234789是我的某個測試檔案的

檔案系統init

title: 根檔案系統之init tag: arm date: 2018-11-12 18:53:23 --- 引入 在Kernel原始碼分析中,瞭解到init_post是在掛載根檔案系統之後執行應用程式 開啟標準輸入/輸出/錯誤 Linux首先開啟標準輸入scanf,標準輸出print

busybox製作檔案系統etc/inittab

/etc/inittab檔案格式簡介: busybox取消了runlevels,runlevels已經被busybox的init程序忽略。如果想使用runlevels,就使用sysvinit來代替。 每個入口的格式:<id>:<runlevels>:<actio

sysfs檔案系統 Attribute

Attributes 屬性 對於系統註冊的每個kobject,都會在sysfs檔案系統中建立一個對應的目錄. attributes以普通檔案的形式為kobject匯出屬性到sysfs檔案系統. attribute 的結構體定義如下: struct attribute {

使用docker搭建FastDFS檔案系統

1.首先下載FastDFS檔案系統的docker映象 查詢映象 [[email protected] /]# docker search fastdfs 安裝映象 [[email protected] ~]# docker pull season/

Linux檔案系統許可權體系

目錄 ①檔案屬性mode 什麼是檔案的許可權: >>>Linux一切皆檔案,多個使用者登入作業系統,系統有預設檔案,root檔案,每個使用者也有自己的檔案,此時需要對檔案系統進行       

Linux檔案系統使用者與組管理

目錄 ①使用者與組管理之重要檔案 (1)/etc/passwd (2)/etc/shadow (3)/etc/login.defs (4)/etc/skel (目錄) (5)/etc/de

docker基礎私庫系列再探Harbor(8)對映象tag進行操作(for zz)

harbor使用了docker的registry,docker的registry所提供的api使用起來並不方便,harbor提供了使用/repositories/{repo_name}/tags可以對映象的tag進行重新設定,非常方便,當然也可以通過docker cli方式使用docke

Linux檔案系統壓縮資料&歸檔資料(打包)

目錄 ①Linux檔案壓縮工具 工具 檔案拓展名 gzip .gz bzip2 .bz2 zip

python檔案處理TXT

檔案讀寫 1、讀寫檔案是最常見的IO操作。Python內建了讀寫檔案的函式,用法和C是相容的。 2、讀寫檔案前,我們先必須瞭解一下,在磁碟上讀寫檔案的功能都是由作業系統提供的,現代作業系統不允許普通的程式直接操作磁碟,所以,讀寫檔案就是請求作業系統開啟一個檔案物件(通常稱