Docker和虛擬機(jī)的區(qū)別及說明
Docker可以讓一個應(yīng)用在任何操作系統(tǒng)中非常方便的運(yùn)行。而以前我們接觸的虛擬機(jī),也能在一個操作系統(tǒng)中,運(yùn)行另外一個操作系統(tǒng),保護(hù)系統(tǒng)中的任何應(yīng)用。
兩者有什么差異呢?
Doker的實現(xiàn)原理
Docker把應(yīng)用及其所需要的依賴、函數(shù)庫、甚至操作系統(tǒng)函數(shù)庫也一起打包,那這樣一來,應(yīng)用直接運(yùn)行時,可以直接調(diào)用本地函數(shù)庫,然后與Linux內(nèi)核進(jìn)行交互,這樣它就不再關(guān)心操作系統(tǒng)是什么系統(tǒng)了,于是就能實現(xiàn)跨系統(tǒng)的一種運(yùn)行了。
虛擬機(jī)(virtual machine)
用到了一種名為Hypervisor的技術(shù),這種技術(shù)可以在操作系統(tǒng)中模擬一個計算機(jī)的各種各樣的硬件設(shè)備(比如CPU、內(nèi)存等等),然后在這個模擬出的計算機(jī)上運(yùn)行另一個操作系統(tǒng),比如在 Windows 系統(tǒng)里面運(yùn)行 Ubuntu 系統(tǒng),這樣就可以運(yùn)行任意的Ubuntu應(yīng)用了。
既然操作系統(tǒng)都能重新安裝,那我們就可以在它上邊去安裝任意適合的依賴、函數(shù)庫、以及應(yīng)用,這樣也實現(xiàn)了跨系統(tǒng)的應(yīng)用部署。

對比來看
我們的虛擬機(jī)它是在一個系統(tǒng)里裝了另外的一個系統(tǒng),所以當(dāng)應(yīng)用執(zhí)行時它會以為自己在一臺真實的電腦上,因此它會去調(diào)用這個內(nèi)置的操作系統(tǒng),然后它再與Hypervisor進(jìn)行交互,然后再把信息傳遞給了我們的web操作系統(tǒng),web操作系統(tǒng)再去調(diào)用計算機(jī)硬件,于是我們的應(yīng)用執(zhí)行就完成了,此時它經(jīng)過了層層的傳遞,所以它的性能相對來講是比較差一點(diǎn)的。
Docker應(yīng)用在執(zhí)行時,是直接調(diào)用操作系統(tǒng)內(nèi)核的,所以它的執(zhí)行性能要比虛擬機(jī)的執(zhí)行性能要好很多。
并且Docker僅僅是封裝應(yīng)用程序執(zhí)行需要的一些簡單的函數(shù)庫和依賴,并沒有模擬完整的操作系統(tǒng),所以體積往往比較小,最小的一個docker容器可能只有幾MB,而大一點(diǎn)就是幾十MB,幾百M(fèi)B;而虛擬機(jī)動不動就要幾個g甚至幾百g的內(nèi)存空間,因此體積占用是比較大的。
并且虛擬機(jī)啟動的時候需要啟動虛擬的計算機(jī)的操作系統(tǒng),等于把這個計算機(jī)重啟了一遍,然后再去啟動虛擬操作系統(tǒng)上面的應(yīng)用。
而Docker就是直接在操作系統(tǒng)上把一個進(jìn)程啟動起來了,所以它的啟動速度也是非常的快。
總結(jié):Docker和虛擬機(jī)的差異
- docker是一個系統(tǒng)進(jìn)程,因為它是直接與操作系統(tǒng)內(nèi)核做交互;虛擬機(jī)是在操作系統(tǒng)中的操作系統(tǒng)
- docker體積小、啟動速度快、性能好;虛擬機(jī)體積大、啟動速度慢、性能一般
因此,現(xiàn)在企業(yè)做服務(wù)部署,基本上都會去選擇用docker,而不會選擇用虛擬機(jī)。
| 特性 | Docker | 虛擬機(jī) |
|---|---|---|
| 性能 | 接近原生 | 性能較差 |
| 硬盤占用 | 一般為 MB | 一般為 GB |
| 啟動 | 秒級 | 分鐘級 |
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
docker在linux系統(tǒng)上邊下載鏡像速度緩慢的問題及解決
這篇文章主要介紹了docker在linux系統(tǒng)上邊下載鏡像速度緩慢的問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04
如何使用docker+frp進(jìn)行內(nèi)網(wǎng)穿透
這篇文章主要介紹了使用docker+frp進(jìn)行內(nèi)網(wǎng)穿透,在公網(wǎng)上的ubuntu系統(tǒng)需要配置相關(guān)操作,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04
Docker容器使用Arthas監(jiān)控Java應(yīng)用的完整指南
這篇文章主要為大家詳細(xì)介紹了如何在運(yùn)行中的 Docker 容器里,為目標(biāo) Java 進(jìn)程快速注入 Arthas 并進(jìn)行線上診斷,感興趣的小伙伴可以了解一下2025-08-08
Docker實現(xiàn)Mariadb分庫分表及讀寫分離功能
這篇文章主要給大家介紹了關(guān)于Docker實現(xiàn)Mariadb分庫分表及讀寫分離功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05

