在雲環境中的應用部署方式上,Docker會不會取代KVM、Xen之類的虛擬機技術?

為了將問題描述清楚,不帶來誤解(Docker和KVM/Xen的確是兩個層面的東西,單純拋開場景說取代是不合適的)。此問題的初衷是,一直以來雲環境下應用部署的工具都是以VM為主,但是近年來以Docker這種容器化方式逐漸變得流行起來,所以想知道,Docker部署方式會不會代替了VM方式。


docker和vm將會處於一個長期共存的狀態。

雖然對比傳統虛擬化方式,docker有一些優勢。比如秒級啟動,資源利用率高,一台宿主機上可以同時拉起幾千台docker。但是縱觀它們的架構,如下圖。

可以看出docker共用了底層的kernel。這就從先天上決定了container的資源隔離性是要差於傳統的虛擬化。此外,容器在用於application時比較方便,但並不包含數據。因此資料庫,日誌等均在容器之外。最後插播一條小廣告,我司的vm亦可達成秒級啟動虛機。有興趣就來試試吧。

UCloud - 專業雲計算服務商


我想說,docker本身不是虛擬化,是對應用程序打包封裝並分發的「事實」標準。目前來說,docker絕大部分的use case還是公有雲(私有雲)上的VM,少數運行在bare metal上的。無所謂誰取代誰的問題。


不會,目前來看,docker 還是有限制的:

1,container的os只能和host一樣.

2,隔離性不好,一個容器kernel panic,其它容器也出問題,類似的也有一些安全方面的擔憂。

3,不能熱遷移。因此負載均衡,按性能彈性計費等都有問題。

=================

關於第1點,docker目前可以在windows下運行,但必須在虛擬機里安裝:

https://docs.docker.com/installation/windows/

容器里的程序其實是做為一個進程直接跑在host上,但同時帶來的問題就是linux進程不能跑在windows上(其實linux kernel不一樣也是可能存在一些問題的),因此要麼使用虛擬機,要麼增加一個類似cygwin/SUA之類的東西來翻譯API,虛擬機的方式意義不大,後一種方式好一點,但是兼容性可疑。


不會,docker其實擴展了虛擬機技術。不過Xen很有可能會被KVM取代


絕對不會,而且這是一個很常見的誤解。

關於docker的技術文章已經很多了,但是很多人在了解了基本知識以後會忽略一個問題——docker是想解決什麼問題,而我認為,討論一個技術,一定要知道它的特點和目標問題域。

我寫了一個系列文章,希望能有助於梳理思路,雖然沒有直接回答題主的問題,但是看過後應該可以得出自己的結論: Docker為什麼


會逐漸替代虛擬機使用量, 不會完全替代. 很多場景只需要基本隔離, 更多需求是想充分利用硬體資源, 並且lxc技術會不斷演進,即使lxc搞不定, 也可再往上去, 如使用新定義的api, 犧牲通用性,換取成本優勢


看了一些資料,容器和虛擬機各有各的應用場景,比如Docker就不能支持Linux以外的kernel(update: win好像已經可以支持Docker)。大家熱衷Docker就是在於使用了Cgroups,namespace和chroot等實現了進程組的打包分組和一定程度上的資源隔離性,大大減少了傳統虛擬化中的諸如指令翻譯、硬體虛擬化等帶來的開銷,方便了應用的開發、測試和部署。Docker最早應該追溯到LXC項目(https://linuxcontainers.org/),現在LXC也已經開始成熟了,而Docker也有了自己的libcontainer,二者並駕齊驅實現操作系統虛擬化。Xen、KVM等成熟虛擬機技術的目前還算比較穩定,也經過了大型商業化的考驗,虛擬機技術可以提供完整的計算環境,這一點是Docker暫時無法比擬的。綜上,虛擬機技術暫時不會被Docker徹底取代,二者各有千秋、各司其職。

------------------------------------------------------update---------------------------------------------------------

https://blog.xenproject.org/2015/08/11/will-docker-replace-virtual-machines/


現在主流的虛擬化方案zen,vmware,kvm等是對硬體層次的虛擬化,docker是對操作系統層次的虛擬化,類似於以前的chroot,不是一個層面的東西談何取代?


Docker是一種讓人很無語的應用隔離/Bundle技術。好的OS根本不需要這種東西。只有放任每個應用自己亂搞的OS才需要這種技術


不是一個概念,Xen、cloudstack、kvm等是針對硬體的虛擬化,docker是os的虛擬化。


最重要的還是系統運行效率,穩定性,以及推廣成本等等。

Docker非常不錯,但是和Xen等虛擬機比較起來,在很多應用場景下不如Xen之類的虛擬機,所以,在未來想當一段時間內,應該都是兩者並存吧。


docker不是虛擬化技術,只是一種資源隔離技術。容器內的進程還是運行在宿主機上的。docker的目標是應該是運維,簡化配置,快速部署,和微服務架構很契合。


docker又不是虛擬機,為什麼會取代虛擬機呢?


性能損耗小是一大優點,但是隔離性差。這一缺點基本決定了它無法取代虛擬化技術


docker就是進程概念的擴展,冠以虛擬化的帽子實際上算是借殼上市迎合跪舔。


虛擬機中跑的是一個完整的操作系統,而docker中跑的是一個進程,就算docker與unikernel結合之後,也不能代替虛擬機,因為unikernel是針對跑在不同docker中的進程而專門定製過的


就目前來說不會取代,隔離性沒有傳統虛擬化強,性能方便相對於傳統vm 各有千秋,但是現在的以docker 為主的容器技術依賴於守護進城,而不是一個管理工具,相對於vm 比較脆弱,給人一種容器比較脆弱的感覺,隨著不斷發展,還是很有可能取代vm


替代還是不能替代的. 但是會擠佔一些之前用kvm/xen的市場. 畢竟kvm的開銷還是不小的.


不可能完全取代吧,docker的交互性還是差了些,針對程序員可以,用戶的話,應該是比較傾向Xen/KVM吧。當然docker的圖形化界面正在被那些大牛們開發,開發出來之後可能會再次代替一部分傳統虛擬化平台的市場。要做到完全取代,還有很長一段路吧


推薦閱讀:

docker在web開發中得使用流程是怎樣的?
DaoCloud是一家什麼樣的公司?
Docker 的應用場景在哪裡?

TAG:雲計算 | 虛擬機 | 虛擬化 | Xen | Docker |