典型的Linux文件系統
典型的Linux文件系統由bootfs與rootfs兩部分組成,bootfs(boot file system)主要包含bootloader和kernel,bootloader主要是引導加載kernel,當kernel被加載到內存中後bootfs就被unmount。
內核啓動後開啓的三個進程
內核啓動後會開啓三個進程,分別是:
進程0(idle進程),空閒進程,也就是死循環。
進程1(init進程),掛載根文件系統,並執行Linuxrc這個應用程序從內核態轉爲用戶態,開啓用戶態的進程(init進程),逐步開啓其他進程。
進程2(kthreadd進程)linux內核的守護進程,負責提供操作系統的核心功能(進程調度、內存管理、設備管理、文件系統)的實現。
Rootfs的作用
根文件系統(rootfs)的作用:
- init進程的應用程序(Linux)在根文件系統上
- 根文件系統提供了根目錄/
- 內核啓動後的應用程序配置(etc目錄)在根文件系統上。
- shell命令程序在根文件系統上。
- /lib目錄下的庫文件等
傳統linux系統
傳統的Linux加載bootfs時會先將rootfs設爲read-only,然後在系統自檢之後將rootfs從read-only改爲read-write,然後就可以在rootfs上進行寫和讀的操作。
Docker鏡像
Docker鏡像,它在bootfs自檢完畢之後並不會把rootfs的read-only改爲read-write。而是利用union mount(Union FS的一種掛載機制)將一個或多個的rootfs加載到之前的read-only的rootfs層之上。 在加載了這麼多層的rootfs之後,仍然讓它看起來只像是個文件系統,在Docker的體系裏把union mount的這些read-only的rootfs叫做docker的鏡像。此時的每一層rootfs都是read-only的,不能對其進行操作。當創建一個容器時,也就是將Docker鏡像進行實例化,系統會在一層或是多層read-only的rootfs之上分配一層空的read-write的rootfs。
Docker容器共享宿主機內核,一個內核可對應多個操作系統版本。如果服務對系統內核沒有要求,可以通過對服務Docker化來解決部署煩惱,Docker化的服務可移植性更高、使用更快捷。如果想學習更多的Docker知識,可以關注微信公衆號:WEL測試