Docker 與虛拟機
虛拟機:
我們傳統的虛拟機需要模拟整台機器包括硬體,每台虛拟機都需要有自己的作業系統,虛拟機一旦被開啟,預配置設定給他的資源将全部被占用。,每一個虛拟機包括應用,必要的二進制和庫,以及一個完整的使用者作業系統。
Docker:
容器技術是和我們的主控端共享硬體資源及作業系統可以實作資源的動态配置設定。
容器包含應用和其所有的依賴包,但是與其他容器共享核心。容器在主控端作業系統中,在使用者空間以分離的程序運作。
虛拟機和容器都是在硬體和作業系統以上的,虛拟機有Hypervisor層,Hypervisor是整個虛拟機的核心所在。他為虛拟機提供了虛拟的運作平台,管理虛拟機的作業系統運作。每個虛拟機都有自己的系統和系統庫以及應用。
容器沒有Hypervisor這一層,并且每個容器是和主控端共享硬體資源及作業系統,那麼由Hypervisor帶來性能的損耗,在linux容器這邊是不存在的。
但是虛拟機技術也有其優勢,能為應用提供一個更加隔離的環境,不會因為應用程式的漏洞給主控端造成任何威脅。同時還支援跨作業系統的虛拟化,例如你可以在linux作業系統下運作windows虛拟機。
從虛拟化層面來看,傳統虛拟化技術是對硬體資源的虛拟,容器技術則是對程序的虛拟,進而可提供更輕量 級的虛拟化,實作程序和資源的隔離。
從架構來看,Docker比虛拟化少了兩層,取消了hypervisor層和GuestOS層,使用 Docker Engine 進行排程和隔離,所有應用共用主機作業系統,是以在體量上,Docker較虛拟機更輕量級,在性能上優于虛拟化,接近裸機性能。從應用場景來 看,Docker和虛拟化則有各自擅長的領域,在軟體開發、測試場景和生産運維場景中各有優劣
具體對比:
1. docker啟動快速屬于秒級别。虛拟機通常需要幾分鐘去啟動。
2. docker需要的資源更少,docker在作業系統級别進行虛拟化,docker容器和核心互動,幾乎沒有性能損耗,性能優于通過Hypervisor層與核心層的虛拟化。;
3. docker更輕量,docker的架構可以共用一個核心與共享應用程式庫,所占記憶體極小。同樣的硬體環境,Docker運作的鏡像數遠多于虛拟機數量。對系統的使用率非常高
4. 與虛拟機相比,docker隔離性更弱,docker屬于程序之間的隔離,虛拟機可實作系統級别隔離;
5. 安全性: docker的安全性也更弱。Docker的租戶root和主控端root等同,一旦容器内的使用者從普通使用者權限提升為root權限,它就直接具備了主控端的root權限,進而可進行無限制的操作。虛拟機租戶root權限和主控端的root虛拟機權限是分離的,并且虛拟機利用如Intel的VT-d和VT-x的ring-1硬體隔離技術,這種隔離技術可以防止虛拟機突破和彼此互動,而容器至今還沒有任何形式的硬體隔離,這使得容器容易受到攻擊。
6. 可管理性:docker的集中化管理工具還不算成熟。各種虛拟化技術都有成熟的管理工具,例如VMware vCenter提供完備的虛拟機管理能力。
7. 高可用和可恢複性:docker對業務的高可用支援是通過快速重新部署實作的。虛拟化具備負載均衡,高可用,容錯,遷移和資料保護等經過生産實踐檢驗的成熟保障機制,VMware可承諾虛拟機99.999%高可用,保證業務連續性。
8. 快速建立、删除:虛拟化建立是分鐘級别的,Docker容器建立是秒級别的,Docker的快速疊代性,決定了無論是開發、測試、部署都可以節約大量時間。
9. 傳遞、部署:虛拟機可以通過鏡像實作環境傳遞的一緻性,但鏡像分發無法體系化;Docker在Dockerfile中記錄了容器建構過程,可在叢集中實作快速分發和快速部署;