虛擬機(Virtual Machine)與容器技術(Container)都是虛擬化技術,兩者的區別在於虛擬化的程度不同。
我們常常把Docker與容器聯系在一起,但請注意:Docker≠容器
Docker是一款開源的Linux軟件,基於容器技術的工具。Docker不是虛擬化技術,它的作用是幫助用戶使用已經內置到操作系統中的容器技術。
下面我們將介紹虛擬機與容器之間的區別,以及Docker軟件。
一、虛擬機與容器
虛擬機與容器的區別,在於vm多了一層guest OS,虛擬機的Hypervisor會對硬件資源也進行虛擬化,而Container會直接使用宿主機的硬件資源。
下面我們采用形象的比喻區分兩者的隔離級別:
服務器:比作一個大型的倉管基地,包含場地與零散的貨物——相當於各種服務器資源。
虛擬機技術:比作倉庫,擁有獨立的空間堆放各種貨物或集裝箱,倉庫之間完全獨立——倉庫相當於各種系統,獨立的應用系統和操作系統。
容器:比作集裝箱,操作各種貨物的打包——將各種應用程序和他們所依賴的運行環境打包成標准的容器,容器之間隔離。
1.隔離性:在隔離性上面,由於vm對操作系統也進行了虛擬化,隔離的更加徹底。而Container共享宿主機的操作系統,隔離性較差。
2.運行效率:由於vm的隔離操作,導致生成虛擬機的速率大大低於容器Container生成的速度,因為Container直接利用宿主機的系統內核。比如openstack能夠以10台/min的速度創建虛擬機,而Container可以做到在幾秒鍾之內創建大量容器,它們的啟動速度是在數量級上的差距。
3.資源利用率:在資源利用率上虛擬機由於隔離更徹底,因此利用率也會相對較低。
三、容器與Docker
Docker不是一種編程語言,也不是構建軟件的框架。Docker是一個工具,可以幫助解決如安裝、拆卸、升級、分發、信任和管理軟件等常見問題。它是一款開源的Linux軟件。
Docker包括一個命令行程序(CLI)、一個后台守護進程和一組遠程服務。它解決了常見的軟件問題,並簡化了安裝、運行、發布和刪除軟件。
這一切能夠實現都是通過使用一項UNIX技術——容器。
1.容器的由來
從歷史上看,UNIX風格的操作系統都使用 jail 這個術語來形容一個修改過的運行時環境,以防止該程序訪問受保護的資源。這個運行環境,自2005年Sun的Solaris 10 和 Solaris容器發布以后,容器已經成為首選的術語。這個運行時環境——容器,作用已經從防止對受保護資源的訪問,擴展到隔離所有的資源,除非明確允許。
2.容器與Docker
容器的使用已經是很長一段時間的最佳做法。但是手動創建容器,具有挑戰性,且很容易出錯。
Docker的出現解決了容器技術的使用問題:任何使用Docker運行的軟件其實是在一個容器內運行。Docker使用現有的容器引擎,用戶可以更方便地獲得容器。具體體現在你無需去關心容器本身,這樣就可以免去接觸容器技術的復雜性,直接使用容器技術的優勢。這樣節省了大量的時間、精力以及金錢,就能夠使用強大的容器技術。
參考鏈接
- https://www.zhihu.com/question/48174633/answer/109868326 by water Cc