docker與虛擬機有何不同 Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的 Linux 機器上,也可以實現虛擬化。 容器技術有很多種,Docker是目前最流行的一種,網易雲也在使用Docker。伺服器虛擬化解決的核心問題是資源 ...
docker與虛擬機有何不同
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的 Linux 機器上,也可以實現虛擬化。
容器技術有很多種,Docker是目前最流行的一種,網易雲也在使用Docker。伺服器虛擬化解決的核心問題是資源調配,而容器解決的核心問題是應用開發、測試和部署。虛擬機技術通過Hypervisor層抽象底層基礎設施資源,提供相互隔離的虛擬機,通過統一配置、統一管理,計算資源的可運維性,以及資源利用率都能夠得到有效的提升。同時,虛擬機提供客戶機操作系統,客戶機變化不會影響宿主機,能夠提供可控的測試環境,更能夠屏蔽底層硬體甚至基礎軟體的差異性,讓應用做到的廣泛相容。然而,再牛逼的虛擬化技術,都不可避免地出現計算、IO、網路性能損失,畢竟多了一層軟體,畢竟要運行一個完整的客戶機操作系統。容器技術嚴格來說並不是虛擬化,沒有客戶機操作系統,是共用內核的。容器可以視為軟體供應鏈的集裝箱,能夠把應用需要的運行環境、緩存環境、資料庫環境等等封裝起來,以最簡潔的方式支持應用運行,輕裝上陣,當然是性能更佳。Docker鏡像特性則讓這種方式簡單易行。當然,因為共用內核,容器隔離性也沒有虛擬機那麼好。但是,更重要的是,通過Docker的特性,以容器化封裝為基礎,企業就可以很好地實現雲原生(向雲而生的架構),包括大家聽得耳朵都起繭子的微服務架構、DevOps,讓開發團隊可以從苦逼的運維工作中解脫,讓應用快速上線、快速迭代。微服務架構下,將系統拆分成多個服務,每個部分都可以獨立開發測試部署,同時我們也可以只擴展需要擴展的部分,也就是變一個三頭六臂的哪吒,而不是總要變三個孫悟空。微服務如何設計,基於容器的規模部署、高可用如何實現等,是另外的問題了。
一般來說,虛擬機都會有自己的kernel,自己的硬體,這樣虛擬機啟動的時候需要先做開機自檢,啟動kernel,啟動用戶進程等一系列行為,雖然現在電腦運行速度挺快,但是這一系列檢查做下來,也要幾十秒,也就是虛擬機需要幾十秒來啟動。
重新來理解虛擬機的概念,電腦科學家發現其實我們創建虛擬機也不一定需要模擬硬體的輸入和輸出,假如宿主機和虛擬機他們的kernel是一致的,就不用做硬體輸入輸出的搬運工了,只需要做kernel輸入輸出的搬運工即可,為了有別於硬體層面的虛擬機,這種虛擬機被命名為 操作系統層虛擬化:Operating-system-level virtualization 也被叫做容器
讓我們來回顧虛擬機的概念,在虛擬機的系統中,虛擬機認為自己有獨立的文件系統,進程系統,記憶體系統,等等一系列,所以為了讓容器接近虛擬機,也需要有獨立的文件系統,進程系統,記憶體系統,等等一系列,為了達成這一目的,主機系統採用的辦法是:只要隔離容器不讓它看到主機的文件系統,進程系統,記憶體系統,等等一系列,那麼容器系統就是一個接近虛擬機的玩意了
Reference
- https://www.zhihu.com/question/48174633/answer/218092411
- https://github.com/WeihanLi/TechNotes/issues/1
- https://zhuanlan.zhihu.com/p/22382728
Contact
Contact me:[email protected]