全文(含圖)連結:淺談虛擬機(VM)與容器(Container)之差異
在現今網路世界中,「雲服務」幾乎是無所不在,而引領我們實踐這一切的關鍵則是「虛擬化技術」。一般而言,雲端應用服務是由實體伺服器 (Host) 上的「虛擬機 Virtual Machine (VM)」所提供。這些應用程式,是在開發人員 (Development Team) 發佈完成後,轉交給維運人員 (Operation Team),並於 VM 上運行。
選擇VM所帶來的好處
至於為何選擇 VM,而非直接在實體伺服器上運行呢?以下僅列出三項主要的好處:
1.每個應用程式 (App) 擁有獨立甚至相互不同的作業系統、環境
2.管理 Host 的資源 (CPU、RAM、Storage) 並分配於各 VM,供 App 有效利用
3.透過 Hypervisor 管理 VM 快照 (Snapshot),以實踐災難恢復 (Disaster Recovery)
容器 Container 的竄紅
然而,科技始終來自於人的不滿足。業界開始認為 VM 仍然佔用太多不必要的資源,因此「容器 Container」便竄紅起來。容器的運作不會模擬硬體資源,故相對於 VM,容器並沒有額外運行作業系統 (Guest OS)。簡而言之,容器就是虛擬化「應用程序及其相對應的環境」。
容器所帶來的好處就更多了,以下僅說明一小部分:
1.VM 的映像檔通常落在數 GB 至數十 GB 都有,而容器映像檔一般最大也才數百 MB。如此輕量級的特性,讓映像檔管理以及 App 的啟動、關閉流程皆方便迅速許多。
2.容器的移轉性強;只要在實體伺服器上安裝了 Docker,無論 Host OS 為任何作業環境,皆能正常運行容器化後的應用程序。
3.容器擁有不可變的特性,意指只要 App 能正常運作一次,未來不必擔心系統環境變動造成 App 出錯。
4.透過 Docker 容器引擎,容器的開發、管理與運行非常簡易,因此實踐 DevOps 的運作 (Development + Operation),解決以往常見開發與維運立場不一的問題。
如此看來,容器似乎將完全掌握未來市場,並取代 VM 的所有應用!事實不然;至少目前還不至於。在選擇使用容器或虛擬機時,有些很關鍵的因素必須深入考量,其中, App 所運作的環境便尤其重要。前面提及容器不可變之特性,雖然非常有利於 App 的運行,但同時也意味著將無法隨意修改系統環境。如此一來,若維運人員需要升級或更動系統設置 (System Configuration) 時,則會遇到不少麻煩,通常也必須由開發人員協助深入改寫程序。反之,在使用 VM 的情況下,維運人員將能夠相對輕易地管理系統環境。
簡單地做個總結:如果雲服務符合以下兩點中的任一條件,VM 的架構則較符合您的需求。
1.在 App 運行的環境中,維運人員需要管理到系統底層
2.必須建構在許多不同的作業系統之上
除此之外,大部分的情況下將建議把 App 容器化,跟上時代趨勢,藉此提升市場競爭力。
撰文: 陳逸凡 迎棧科技解決方案架構師