前情提要:
Docker與容器基礎介紹 (1)
複習一下虛擬機與容器的差異:
昨天講解了虛擬機與容器的差異與各自的優缺點,今天進一步來介紹容器運作的原理
前篇文章提到的"容器是模擬作業系統",這句話並不太正確,更正確的說法是,容器共用了宿主機的系統核心
可以做到這件事,跟Linux有著密切的關連
所謂的Linux系統,指的是基於Linux核心開發並衍伸出去的作業系統(Linux發行版),如: Debian,CentOS,Arch,Fedora...
"Linux"這個詞,指的是系統核心,可以想像成機場的塔台,負責調度機場中的飛機起降,與大大小小的突發事件
這些系統雖然都有著Linux核心,但並不代表執行檔是能夠通用在所有Linux系統上執行的,會遇到以下狀況,如:
為了解決上述問題,容器採用了資源隔離機制,把檔案系統、網絡、程序等資源隔離,每個容器無法存取其他容器或宿主機的資源,可以想像成除了你家原本的客廳(宿主機)之外,又多蓋了間客房(容器),每個客房都有自己的一套家具與設備,互不干擾
除了資源分離外,我們也需要對資源進行限制,避免容器不會搶奪過多資源,影響彼此的效能。
對這方面的技術有興趣的人可以搜尋Linux namespace與cgroups去了解細節
用下面這張圖可以清楚了解,容器為什麼比起虛擬機要輕量的多
容器不模擬出硬體層與作業系統核心,與宿主機共用相同的系統核心,用隔離機制達到我們所希望的"統一運行環境",也就是"Build Once, Run Anywhere"