docker 專案的目標是實現輕量級的作業系統虛擬化解決方案。 docker 的基礎是 linux 容器(lxc)等技術。
在 lxc 的基礎上 docker 進行了進一步的封裝,讓使用者不需要去關心容器的管理,使得操作更為簡便。使用者操作 docker 的容器就像操作乙個快速輕量級的虛擬機器一樣簡單。
下面的比較了 docker 和傳統虛擬化方式的不同之處,可見容器是在作業系統層面上實現虛擬化,直接復用本地主機的作業系統,而傳統方式則是在硬體層面實現。
作為一種新興的虛擬化方式,docker 跟傳統的虛擬化方式相比具有眾多的優勢。
docker 容器的啟動可以在秒級實現,這相比傳統的虛擬機器方式要快得多。 其次,docker 對系統資源的利用率很高,一台主機上可以同時執行數千個 docker 容器。
容器除了執行其中應用外,基本不消耗額外的系統資源,使得應用的效能很高,同時系統的開銷盡量小。傳統虛擬機器方式執行 10 個不同的應用就要起 10 個虛擬機器,而docker 只需要啟動 10 個隔離的應用即可。
虛擬化技術依賴物理cpu和記憶體,是硬體級別的;而docker構建在作業系統上,利用作業系統的containerization技術,所以docker甚至可以在虛擬機器上執行。
虛擬化系統一般都是指作業系統映象,比較複雜,稱為「系統」;而docker開源而且輕量,稱為「容器」,單個容器適合部署少量應用,比如部署乙個redis、乙個memcached。
傳統的虛擬化技術使用快照來儲存狀態;而docker在儲存狀態上不僅更為輕便和低成本,而且引入了類似源**管理機制,將容器的快照歷史版本一一記錄,切換成本很低。
傳統的虛擬化技術在構建系統的時候較為複雜,需要大量的人力;而docker可以通過dockfile來構建整個容器,重啟和構建速度很快。更重要的是dockfile可以手動編寫,這樣應用程式開發人員可以通過發布dockfile來指導系統環境和依賴,這樣對於持續交付十分有利。
當然kvm對比於容器也有乙個比較大的優勢就是可以使用不同的作業系統或核心。所以,舉例說,你可以使用微軟azure,同時執行windows server2012的例項和suse linux企業級伺服器的例項。至於docker,所有容器都必須使用同樣的作業系統和核心。
具體說來,docker 在如下幾個方面具有較大的優勢。
對開發和運維(devop)人員來說,最希望的就是一次建立或配置,可以在任意地方正常執行。
開發者可以使用乙個標準的映象來構建一套開發容器,開發完成之後,運維人員可以直接使用這個容器來部署**。 docker 可以快速建立容器,快速迭代應用程式,並讓整個過程全程可見,使團隊中的其他成員更容易理解應用程式是如何建立和工作的。 docker 容器很輕很快!容器的啟動時間是秒級的,大量地節約開發、測試、部署的時間。
docker 容器的執行不需要額外的 hypervisor 支援,它是核心級的虛擬化,因此可以實現更高的效能和效率。
docker 容器幾乎可以在任意的平台上執行,包括物理機、虛擬機器、公有雲、私有雲、個人電腦、伺服器等。這種相容性可以讓使用者把乙個應用程式從乙個平台直接遷移到另外乙個。
使用 docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分發和更新,從而實現自動化並且高效的管理。
特性容器
虛擬機器啟動
秒級分鐘級
硬碟使用
一般為 mb
一般為 gb
效能接近原生
弱於系統支援量
單機支援上千個容器
一般幾十個
lxc是基於cgroup等linux kernel功能的,因此container的guest系統只能是linux base的
隔離性相比kvm之類的虛擬化方案還是有些欠缺,所有container公用一部分的執行庫
網路管理相對簡單,主要是基於namespace隔離
cgroup的cpu和cpuset提供的cpu功能相比kvm的等虛擬化方案相比難以度量(所以dotcloud主要是安記憶體收費)
container隨著使用者程序的停止而銷毀,container中的log等使用者資料不便收集
另外,docker是面向應用的,其終極目標是構建paas平台,而現有虛擬機器主要目的是提供乙個靈活的計算資源池,是面向架構的,其終極目標是構建乙個iaas平台,所以它不能替代傳統虛擬化解決方案。目前在容器可管理性方面,對於方便運維,提供ui來管理監控各個containers的功能還不足,還都是第三方實現。因為容器技術本身更適於解決大規模應用場景,所以通常都是集群基礎上的部署、運維,但是目前對這一系列任務的自動化處理尚無統一的或者標準的框架。如果要讓docker真正在實際環境中發揮最大的效能並且易於維護,就需要有成熟穩定的資源編排(orchestration)、資源排程(scheduling)和部署(deployment)的支援,但是這方面暫時還沒有很明顯的最佳解決方案,所以大多數人都在摸索和搭建自己的解決方案。
Docker與KVM之間的區別
docker 專案的目標是實現輕量級的作業系統虛擬化解決方案。docker 的基礎是 linux 容器 lxc 等技術。在 lxc 的基礎上 docker 進行了進一步的封裝,讓使用者不需要去關心容器的管理,使得操作更為簡便。使用者操作 docker 的容器就像操作乙個快速輕量級的虛擬機器一樣簡單。...
Docker與KVM之間的區別
docker 專案的目標是實現輕量級的作業系統虛擬化解決方案。docker 的基礎是 linux 容器 lxc 等技術。在 lxc 的基礎上 docker 進行了進一步的封裝,讓使用者不需要去關心容器的管理,使得操作更為簡便。使用者操作 docker 的容器就像操作乙個快速輕量級的虛擬機器一樣簡單。...
Docker與KVM之間的區別
作為一種新興的虛擬化方式,docker 跟傳統的虛擬化方式相比具有眾多的優勢。1.docker 容器的啟動可以在秒級實現,這相比傳統的虛擬機器方式要快得多。其次,docker 對系統資源的利用率很高,一台主機上可以同時執行數千個 docker 容器。2.容器除了執行其中應用外,基本不消耗額外的系統資...