Container與VM的差別
相信很多人在翻網路文章的時候,一定很常看到這兩者的比較,也許有點廢話,但是想要知道何時使用VM何時使用Container就多少要知道這兩者的差別,今天部分主要是整理一些雙方的優缺點,可以去思考哪時候用哪一種會比較好。
docker的Container與VM的架構比較
圖片擷取來源
ps:Hypervisor是用來建立與管理VM的運作。
VM的好處
- 安全性較高,因為硬體層以上都虛擬化,因此安全性會相對較高。
- 系統的選擇較多,在VM可以選擇各種不同的OS。
- 應用程式不須要被拆分,因此不需要大幅更改應用程式的架構。簡單來說不需要降低應用程式內服務的耦合性,不需要將程式內的服務個別拆開來部屬。
VM的缺點
- VM的Image大小通常為GB以上,較Container大。
- 啟動速度通常要花個幾分鐘,因此服務重啟的速度較慢。
- 資源使用較多,因為不只給應用程式本身,還要將一部分資源分給VM的作業系統。
Container的好處
- Image較小,通常幾MB。
- 啟動速度較快,通常幾秒就能生成一個Container。
- 因為免去了去在執行一個OS的資源。所以能將更多資源運用在跑服務上。
- 更新較為容易,只需要利用新的Image重新啟動就會更新了。
Container的缺點
- 安全性較VM差,因為環境和硬體都是與本機共用。
- 在同一台機器中,每個Container的OS都是相同,例如無法一個為windows一個為Linux,還是依賴Host OS。
- Container通常切分成微服務(Microservices)的方式做部署,在各元件中的網路連結會比較複雜。
Container與VM的比較
- Container是以應用程式為單位,而VM是以作業系統為單位。
- Container依賴Host OS的核心(kernel)來運行Container,因此Windows的Container必須在Windows OS上運行;Linux的Container必須在Linux-base OS上運行。而VM則可以隨意選擇。
- Container是一個封裝了相依性資源與應用程式的執行環境;VM則是一個配置好CPU、RAM與Storage的作業系統。
- Container間是彼此隔離的,因此在同一台機器我們可以執行不同的版本的服務,但是VM則會因版本不同造成環境的衝突。
- Container因為是以程式為單位,需要的硬體資源更少,VM則會先佔用CPU、RAM等等硬體資源,不管有沒有要用都會先佔用。
- VM使用較大型的服務、而Container多使用於微服務中。
就我而言,Container我會使用一些耦合性比較低的專案去做使用,而VM則是大型專案去做使用,例如VM會架設一個線上商城的網站服務,有購買、註冊、登入、購物列表等等許多功能,而Container我會拿去架設一些像是Jenkins這種各種功能的相連性不高的服務。