docker容器和虛擬機

前言

1: 只知道虛擬機會對硬件進行虛擬化,容器使用的硬件資源還是宿主機的

 

正文

1: 對 Docker 項目來說,它最核心的原理實際上就是爲待創建的用戶進程: 啓用 Linux Namespace 配置; 設置指定的 Cgroups 參數; 切換進程的根目錄(Change Root)。

 

2: 實際上,同一臺機器上的所有容器,都共享宿主機操作系統的內核。

 

這就意味着,如果你的應用程序需要配置內核參數、加載額外的內核模塊,以及跟內核進行直接的交互,你就需要注意了:這些操作和依賴的對象,都是宿主機操作系統的內核,它對於該機器上的所有容器來說是一個“全局變量”,牽一髮而動全身。

 

這也是容器相比於虛擬機的主要缺陷之一:畢竟後者不僅有模擬出來的硬件機器充當沙盒,而且每個沙盒裏還運行着一個完整系統。

 

3:容器鏡像,也叫作:rootfs。它只是一個操作系統的所有文件和目錄,並不包含內核,它和mount namespace協助構建出獨立的文件系統。

 

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

所以,一個最常見的 rootfs,或者說容器鏡像,會包括如下所示的一些目錄和文件,比如 /bin,/etc,/proc 等等:

所以說,rootfs 只包括了操作系統的“軀殼”,並沒有包括操作系統的“靈魂”。

靈魂就是操作系統的內核!所有的容器都共享着宿主機的內核,所以容器對內核的修改會牽一髮而動全身。

 

4:

Docker 在鏡像的設計中,引入了層(layer)的概念。也就是說,用戶製作鏡像的每一步操作,都會生成一個層,也就是一個增量 rootfs。

所謂的“鏡像”,實際上就是一個 Ubuntu 操作系統的 rootfs,它的內容是 Ubuntu 操作系統的所有文件和目錄。不過,與之前我們講述的 rootfs 稍微不同的是,Docker 鏡像使用的 rootfs,往往由多個“層”組成。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章