VM架構如下:
container則是直接架在Linux Kernel上:
VM有幾個明顯的問題:
- 一台VM通常會同時跑好幾個App,當你VM死掉時比較難查出是誰造成的
- VM的資源分配無法彈性調整,例如某台機器很閒你想把他的資源分給其他人,這在VM上比較難做到。
- 每一台VM裡面都要有OS,資源比較浪費
Container的基本原理是用Linux的指令來達到process的隔離
- cgroup: 資源限制
- namespace: pid、網路、掛載點
版本相依
以傳統VM開發來說,可能會遇到VM的執行環境與開發人員的環境不同,需要升版等問題。而container則是把相依的執行環境都打包進去image,維運端根本不需要考慮版本相依的問題。