運行在Linux容器當中的應用程序都被相互隔離在單獨的操作系統副本當中,而這些系統則運行在同一台物理服務器之上。這種解決方案與傳統基於虛擬機管理程序的虛擬化方案有所不同,後者是將每款應用程序綁定到一套完整的訪客操作系統副本中,並通過虛擬機管理程序的介入實現應用與硬件之間的通信。如此一來,容器機制只需要消耗很少一部分內存等系統資源,而且基本上不會造成任何性能損耗。
使用容器的一大意義在於,運行在特定環境中的各個操作系統副本往往會以相對均勻的方式並行運作,這是因為它們基本上是作為通用的共享基板存在、所有應用程序則全部運行其上。特定的關聯關系可以打包至應用程序當中(在用戶空間中的孤立進程之內),但其內核仍然會共享至系統上所運行的各個容器。
有鑒於此,操作系統再也不會像過去那種被配置、調整、集成乃至最終依附於單一應用程序,但並不是說操作系統在這場變革中未能起到重要作用。事實上,由於操作系統負責提供整體框架並支持運行其上的全部容器,它如今所扮演的角色甚至要比硬件服務器虛擬化當中由虛擬機管理程序充當的主機更為關鍵。(當然,以KVM為例,這款虛擬機管理程序會利用操作系統實現必需的‘類操作系統’功能,但該管理程序內部並沒有任何與此要求相關的架構設計。)
所有適用於虛擬化領域的安全增強、性能優化、可靠性工程以及認證機制都能順利同容器技術相對接。而且事實上,操作系統肩負著更為重要的使命,即提供一套安全與資源隔離體系——其需要達成的效果比虛擬機管理程序在處理類似任務時更為嚴苛。在我們即將迎接的未來中,操作系統還必須處理多主機應用程序,也就是作為協調與調度機制對其加以管理。其中包括為跨主機應用程序及容器構建運作模式,並提供必要的服務與API以將應用程序與其對應的合適資源進行對接。換句話來說,Linux正逐步演變以支撐起一套嶄新的環境,其中“計算機”將成為一套復雜的連接系統、而不再像過去那樣只扮演單一的離散服務器角色。
在這樣的環境下,更重要的一點是利用合理的機制保證應用程序構建的可移植性。就整體概念而言,這樣的思路算不上什麼新鮮事物。作為行業分析師,我自始至終都在花費大量時間撰寫與各類現有虛擬化及拆分技術相關的研究文章。在此之中,“應用程序虛擬化”正是這樣一種技術方案。作為一類解決思路,應用程序虛擬化仍然屬於利基型業務,但將在未來逐步邁向發展的頂點。以Docker為代表的此類技術充分發揮了容器模式的巨大優勢,從而創建出在實際效果上與應用程序虛擬化極為相近的解決方案:將應用程序作為多種層加以構成,並將其在低損耗環境下進行往來移動。
是的,這絕對是一股正愈演愈烈的操作系統抽象化發展趨勢;我們開始逐漸遠離過去那種面向各個應用程序實例的純手動、硬編碼式實例操作方式——正如我們當初擺脫由單一服務器負責承載的多個操作系統實例一樣。而且沒錯,要求對泛用性操作系統加以定制的應用程序已經無法在容器型環境當中繼續發揮作用並帶來良好的匹配效果。當下令容器擁有如此吸引力的主要趨勢之一在於,它們已經不再像十年前那樣僅在利基空間中掙扎求存,而是朝著可移植、非狀態性應用程序實例進行大規模轉變。操作系統所扮演的角色仍然非常關鍵;現在我們需要使用一套標准化基礎鏡像來承載自己的全部應用程序,而不再以標准基礎鏡像為模板針對每款應用作出具體調整。
綜合來看,容器時代下的應用程序變得更具適應性、更具移動性、更具分布式特性而且更加輕量化。它們的部署與配置工作引入更多自動化要素。不過它們仍然需要以某些基礎作為運行依托——這些基礎必須穩定而且開放,並有能力針對新型需求及具體工作負載類型進行演變。能夠滿足這些條件操作系統,正是Linux。