容器化真正的本質是將分布式系統對主機、虛擬機的管理轉而直接對分布式環境中大量的進程進行管理,簡化了對應用運行時環境額外的管控開銷,提升了系統的運行效率。
容器的內涵
- 容器包含兩個內涵,一個是操作系統的隔離特性,一個是在容器內運行時的鏡像物件。<b>本質還是對應用運行時全棧的抽象(應用本身的組成結構 + 運行時資源依賴)。</b>
- 其中對于操作系統的資源,包括存儲、網絡、進程命名空間等的隔離,是對應用享有完整運行時依賴(資源)的抽象,目的是為了讓一個host上的os以及相關資源能夠共享同時每個應用本身又能達到獨享的效果,從這個維度看,難點在于對資源的抽象,迄今為止,這個抽象尚且沒有哪個容器技術做到完全抽象,都存在一定共享的資源,比如存儲。隔離性的抽象程度決定了鏡像物件的形態。
- 容器另外一個內涵是鏡像物件,是一個應用能夠在主機操作系統之上運行時完全“自包含”的所有軟件構件(應用自身、運行時平臺如jvm、系統的庫等),鏡像“自包含”的程度決定了鏡像本身的構成穩定性,如多個鏡像共享一個基礎鏡像,那基礎鏡像的穩定性決定了所有依賴它的鏡像的穩定性。通過一系列技術來驅動“自包含”鏡像的達成是鏡像的最佳實踐目標之一。
運行時關注點面向應用、通過容器作為載體來實現
- 傳統的運行時架構關注應用本身 + 運行時平臺(如JVM)+ 系統平臺(如Linux、存儲、網絡等等),為了讓一個應用穩定可靠運行,關注點較多且分離。通過容器來對以上運行時平臺和系統平臺進行抽象承載,我們將應用和容器支撐服務(健康檢查、存儲策略等)合并,使我們只需要關注應用這一個中心點即可把控應用運行時所有的關注點,極大提升了效率。