容器的進程與namespace、rootfs

一:容器是什麼

容器的本質是一種特殊的進程。linux

在linux容器中有三個重要的概念:Namespace、Cgroups、rootfs。docker

Namespace作隔離,讓進程只能看到Namespace中的世界;spa

Cgroups     作限制,讓這個「世界」圍着一個看不見的牆。操作系統

rootfs          作文件系統,rootfs 只是一個操做系統所包含的文件、配置和目錄,並不包括操做系統內核。blog

這樣就實現了進程在咱們所看到的一個與世隔絕的房間,這個房間就是Pass項目賴以生存的"沙盒"。進程

 

二:Namespace是什麼

進入容器後,ps命令看到的容器的應用進程都是1號進程,這個實際上是pid  namespace致使,他其實就是個障眼法,虛擬機

讓你看到的是相似於一個新的虛擬機新環境,實際上是不同的,容器就是一個運行的進程,而容器中的其餘進程則是pid爲1的子進程。it

除了剛剛pid namespace,還有其它的namespace以下:容器

 容器是怎麼新建namespace的?配置

 docker建立容器,其實就是linux系統的一次fork的調用,

在進行fork調用時,會傳入一些flag參數,這個參數能夠控制對linux內核調用新的namespace。

 

三:rootfs

掛載在容器根目錄上、用來爲容器進程提供隔離後執行環境的文件系統,就是所謂的「容器鏡像」。它還有一個更爲專業的名字,叫做:rootfs(根文件系統)。

容器的rootfs由三部分組成,1:只讀層、2:可讀寫層、3:init層

1.只讀層:都以增量的方式分別包含了  操做系統的一部分。

2.可讀寫:就是專門用來存放你修改 rootfs 後產生的增量,不管是增、刪、改,都發生在這裏。而當咱們使用完了這個被修改過的容器以後,還能夠使用 docker commit 和 push 指令,保存這個被修改過的可讀寫層,並上傳到 Docker Hub 上,供其餘人使用;而與此同時,原先的只讀層裏的內容則不會有任何變化。這,就是增量 rootfs 的好處。

3.Init 層:是 Docker 項目單獨生成的一個內部層,專門用來存放 /etc/hosts、/etc/resolv.conf 等信息。

相關文章
相關標籤/搜索