Docker和虛擬機(jī)的區(qū)別及說明
Docker可以讓一個(gè)應(yīng)用在任何操作系統(tǒng)中非常方便的運(yùn)行。而以前我們接觸的虛擬機(jī),也能在一個(gè)操作系統(tǒng)中,運(yùn)行另外一個(gè)操作系統(tǒng),保護(hù)系統(tǒng)中的任何應(yīng)用。
兩者有什么差異呢?
Doker的實(shí)現(xiàn)原理
Docker把應(yīng)用及其所需要的依賴、函數(shù)庫(kù)、甚至操作系統(tǒng)函數(shù)庫(kù)也一起打包,那這樣一來,應(yīng)用直接運(yùn)行時(shí),可以直接調(diào)用本地函數(shù)庫(kù),然后與Linux內(nèi)核進(jìn)行交互,這樣它就不再關(guān)心操作系統(tǒng)是什么系統(tǒng)了,于是就能實(shí)現(xiàn)跨系統(tǒng)的一種運(yùn)行了。
虛擬機(jī)(virtual machine)
用到了一種名為Hypervisor的技術(shù),這種技術(shù)可以在操作系統(tǒng)中模擬一個(gè)計(jì)算機(jī)的各種各樣的硬件設(shè)備(比如CPU、內(nèi)存等等),然后在這個(gè)模擬出的計(jì)算機(jī)上運(yùn)行另一個(gè)操作系統(tǒng),比如在 Windows 系統(tǒng)里面運(yùn)行 Ubuntu 系統(tǒng),這樣就可以運(yùn)行任意的Ubuntu應(yīng)用了。
既然操作系統(tǒng)都能重新安裝,那我們就可以在它上邊去安裝任意適合的依賴、函數(shù)庫(kù)、以及應(yīng)用,這樣也實(shí)現(xiàn)了跨系統(tǒng)的應(yīng)用部署。
對(duì)比來看
我們的虛擬機(jī)它是在一個(gè)系統(tǒng)里裝了另外的一個(gè)系統(tǒng),所以當(dāng)應(yīng)用執(zhí)行時(shí)它會(huì)以為自己在一臺(tái)真實(shí)的電腦上,因此它會(huì)去調(diào)用這個(gè)內(nèi)置的操作系統(tǒng),然后它再與Hypervisor進(jìn)行交互,然后再把信息傳遞給了我們的web操作系統(tǒng),web操作系統(tǒng)再去調(diào)用計(jì)算機(jī)硬件,于是我們的應(yīng)用執(zhí)行就完成了,此時(shí)它經(jīng)過了層層的傳遞,所以它的性能相對(duì)來講是比較差一點(diǎn)的。
Docker應(yīng)用在執(zhí)行時(shí),是直接調(diào)用操作系統(tǒng)內(nèi)核的,所以它的執(zhí)行性能要比虛擬機(jī)的執(zhí)行性能要好很多。
并且Docker僅僅是封裝應(yīng)用程序執(zhí)行需要的一些簡(jiǎn)單的函數(shù)庫(kù)和依賴,并沒有模擬完整的操作系統(tǒng),所以體積往往比較小,最小的一個(gè)docker容器可能只有幾MB,而大一點(diǎn)就是幾十MB,幾百M(fèi)B;而虛擬機(jī)動(dòng)不動(dòng)就要幾個(gè)g甚至幾百g的內(nèi)存空間,因此體積占用是比較大的。
并且虛擬機(jī)啟動(dòng)的時(shí)候需要啟動(dòng)虛擬的計(jì)算機(jī)的操作系統(tǒng),等于把這個(gè)計(jì)算機(jī)重啟了一遍,然后再去啟動(dòng)虛擬操作系統(tǒng)上面的應(yīng)用。
而Docker就是直接在操作系統(tǒng)上把一個(gè)進(jìn)程啟動(dòng)起來了,所以它的啟動(dòng)速度也是非常的快。
總結(jié):Docker和虛擬機(jī)的差異
- docker是一個(gè)系統(tǒng)進(jìn)程,因?yàn)樗侵苯优c操作系統(tǒng)內(nèi)核做交互;虛擬機(jī)是在操作系統(tǒng)中的操作系統(tǒng)
- docker體積小、啟動(dòng)速度快、性能好;虛擬機(jī)體積大、啟動(dòng)速度慢、性能一般
因此,現(xiàn)在企業(yè)做服務(wù)部署,基本上都會(huì)去選擇用docker,而不會(huì)選擇用虛擬機(jī)。
特性 | Docker | 虛擬機(jī) |
---|---|---|
性能 | 接近原生 | 性能較差 |
硬盤占用 | 一般為 MB | 一般為 GB |
啟動(dòng) | 秒級(jí) | 分鐘級(jí) |
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
docker容器與centos宿主機(jī)時(shí)間一致設(shè)置方法
這篇文章主要介紹了docker容器與centos宿主機(jī)時(shí)間一致設(shè)置方法,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-05-05Docker 數(shù)據(jù)卷及數(shù)據(jù)容器詳細(xì)介紹及示例
這篇文章主要介紹了Docker 數(shù)據(jù)卷及數(shù)據(jù)容器詳細(xì)介紹及示例的相關(guān)資料,Docker 很強(qiáng)大,不僅部署維護(hù)提高效率,docker和宿主之間的數(shù)據(jù)共享以及docker間的數(shù)據(jù)共享需要好好研究一下,需要的朋友可以參考下2016-11-11CentOS7 禁用Transparent Huge Pages的實(shí)現(xiàn)方法
這篇文章主要介紹了 CentOS7 禁用Transparent Huge Pages的實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下2016-11-11使用docker?compose快速配置一組容器服務(wù)詳解
這篇文章主要為大家介紹了使用docker-?compose快速配置一組容器服務(wù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11SpringCloud基于Docker和Docker-Compose的項(xiàng)目部署過程
本文介紹了如何卸載舊版本Docker、更新系統(tǒng)、安裝Docker及其依賴,并設(shè)置國(guó)內(nèi)鏡像源以加快下載速度,詳細(xì)說明了如何安裝Docker Compose、配置鏡像加速器,并展示了如何使用Docker Compose部署SpringCloud項(xiàng)目,提供了更新和重啟容器的方法2024-10-10docker獲取Let''s Encrypt永久免費(fèi)SSL證書的方法
在本篇文章里小編給大家分享了一篇關(guān)于docker獲取Let's Encrypt永久免費(fèi)SSL證書的方法,以后需要的朋友們可以參考下。2021-01-01基于Docker+K8S+GitLab/SVN+Jenkins+Harbor搭建持續(xù)集成交付環(huán)境的詳細(xì)教程
K8S全稱是Kubernetes,是一個(gè)全新的基于容器技術(shù)的分布式架構(gòu)領(lǐng)先方案,這篇文章主要介紹了基于Docker+K8S+GitLab/SVN+Jenkins+Harbor搭建持續(xù)集成交付環(huán)境(環(huán)境搭建篇),對(duì)docker K8S持續(xù)集成交付環(huán)境相關(guān)知識(shí)感興趣的朋友一起看看吧2021-05-05在Docker中構(gòu)建并運(yùn)行Nginx容器的完整教程
Docker 作為一種強(qiáng)大的容器化平臺(tái),使得開發(fā)、測(cè)試和部署變得更加高效和靈活,Nginx 是一款廣泛使用的高性能 Web 服務(wù)器和反向代理服務(wù)器,適用于各種場(chǎng)景,在本教程中,我們將詳細(xì)介紹如何在 Docker 中構(gòu)建并運(yùn)行一個(gè) Nginx 容器,需要的朋友可以參考下2024-09-09