Docker與虛擬機區別詳解(圖文全面總結)
Docker
Docker 是一個開源的容器化平臺,能夠將應用程序、及其依賴環境打包成輕量級、可移植的容器。
為什么Docker如此之風靡?原因很簡單:因為Docker能很好的解決在不同環境中運行一致性,并且占用的資源還少,而且還快。
所以說,好的東西,就應該得到更多人的喜歡,因為Docker確確實實解決了我們平常開發和運維的問題。
比如:在如今的微服務架構中,我們可以將應用程序拆分成多個獨立的服務,每個服務運行在獨立的容器中。
這樣,不僅方便開發、測試、和部署,而且Docker 容器可以在不同的操作系統和平臺上運行,確保跨平臺的一致性。
圖片
多個容器可以在同一臺計算機上運行,并與其他容器共享其OS內核,每個容器在用戶空間中作為隔離的進程運行。
虛擬機
虛擬機,全程是Virtual Machine,簡稱 “虛擬機VM”。
虛擬機,是一種利用軟件模擬的計算機系統,它能夠在物理硬件的基礎上,運行多個虛擬計算機。
如下圖所示:
圖片
虛擬機,是基于物理機(宿主機)上運行的獨立計算環境,擁有獨立的操作系統、應用程序、和資源。
比如:一臺服務器,可以模擬出多臺“虛擬機”。
這個時候,虛擬機運行在一個物理主機上,它的硬件資源(如:CPU、內存、磁盤...等),由宿主機提供并被虛擬化。
虛擬機的管理工具,常見的包括 :VMware、Hyper-V... 等,主要用于創建/和管理虛擬機。
雖然,看上去是多了幾臺“服務器”,但是多個虛擬機的操作系統,是共享同一個硬件環境中并存運行。
雖然虛擬機、和容器都是虛擬化技術,但它們的運行方式、和用途有所不同,下面我重點談談兩者的區別@mikechen
Docker和虛擬機區別
圖片
虛擬機更重,Docker相對輕量級
這是Docker和虛擬機最大的區別,我把它放到第一位。
首先,虛擬機提供完整的操作系統、和硬件環境,適用于需要隔離的多操作系統環境。
虛擬機由于每個虛擬機,都需要攜帶一個完整的操作系統(OS),這點非常的重要。
所以,采用虛擬機了,即使應用程序本身很小,整體體積也會因為操作系統的存在而變得龐大。
所以,這使得虛擬機不僅占用大量的存儲空間,還在啟動時需要加載整個操作系統,導致其啟動時間較長、運行時的資源占用較高。
這也是為什么?Docker虛擬化技術風靡的最重要的原因。
Docker則通過共享宿主機操作系統的內核,避免了為每個應用程序分配一個獨立的操作系統。
這樣,每個 Docker 容器只包含:應用程序、及其依賴,減少了鏡像的體積,并且啟動速度更快,運行更加輕巧。
這也是 Docker 相比虛擬機最大的優勢之一,尤其在微服務和容器化應用場景下顯得非常有效。
虛擬機啟動慢,Docker啟動快
剛才我已經談到了兩者最大的區別,就談到了虛擬機需要攜帶操作系統(OS)。
所以,虛擬機的啟動時間較長,這就很正常了,因為:虛擬機,需要啟動完整的操作系統。
而Docker容器,不需要啟動操作系統,因此具有更快的響應速度。
虛擬機占用資源多,Docker占用資源小
由于虛擬機,需要運行一個獨立的操作系統,因此資源開銷較大。
比如:虛擬機需要占用較多的 CPU、內存、磁盤空間,并且每個虛擬機都有固定的資源分配。
所以,一臺服務器一般也就不能虛擬很多“服務器”。
而Docker 容器,共享宿主機的操作系統內核,不需要額外的操作系統開銷。
所以,占用資源更小,是“進程”級別的,所以資源利用率更高。
虛擬機適用重量級隔離,容器輕量級隔離
當然,說了這么多,也不是說虛擬機一無是處,關鍵是用對應用場景。
比如:虛擬機就適用于需要強隔離的多操作系統環境,常用于運行不同的操作系統、測試環境、或需要高安全性的場景。
而Docker容器,更適用于:微服務架構、持續集成與交付(CI/CD)、高密度部署、以及輕量級的隔離場景。