一、虛擬化概述及簡介
通俗的說,虛擬化就是把物理資源轉變為邏輯上可以管理的資源,以打破物理結構間的壁壘,計算元件運行在虛擬的基礎上而不是真實的基礎上,可以擴大硬件的容量,簡化軟件的重新配置過程。
允許一個平臺同時運行多個操作系統,并且應用程序都可以在相互獨立的空間內運行而互不影響,從而顯著提高計算機的工作效率,是一個為了簡化管理,優化資源的解決方案。
目前主流的虛擬化技術主要有:KVM、Xen、VMware、VirtualBox、Docker,虛擬化技術也越來越廣泛的應用在企業中,例如Taobao、Google等。
虛擬化原理:虛擬化解決方案的底部是要進行虛擬化的物理機器。這臺機器可能直接支持虛擬化,也可能不會直接支持虛擬化;那么就需要系統管理程序層的支持。系統管理程序(Virtual machine monitor),或稱為 VMM,可以看作是平臺硬件和操作系統的抽象化。在某些情況中,這個系統管理程序就是一個操作系統;此時,它就稱為主機操作系統。
圖 1. 虛擬化的分層抽象
完全擬化技術實際上是通過軟件實現對操作系統的資源再分配,比較成熟,例如我們的KVM、virtualBOX;
而半虛擬化技術則是通過代碼修改已有的系統,形成一種新的可虛擬化的系統,調用硬件資源去安裝多個系統,整體速度上相對高一點,代表產品有Xen。
二、Docker入門簡介
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發布到任何流行的Linux機器上,也可以實現虛擬化。
容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app)。幾乎沒有性能開銷,可以很容易地在機器和數據中心中運行。最重要的是,他們不依賴于任何語言、框架或包括系統。
"Docker"應該是2014年最火爆的技術之一,如果沒有聽說過,那么你就out了,2015年將開啟新的跨越。
Docker 自開源后受到廣泛的關注和討論,以至于 dotCloud 公司后來都改名為 Docker Inc。Redhat 已經在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 產品中廣泛應用。
Docker 項目的目標是實現輕量級的操作系統虛擬化解決方案。 Docker 的基礎是 Linux 容器(LXC)等技術。
在 LXC 的基礎上 Docker 進行了進一步的封裝,讓用戶不需要去關心容器的管理,使得操作更為簡便。用戶操作 Docker 的容器就像操作一個快速輕量級的虛擬機一樣簡單。
下面對比了Docker 和傳統虛擬化(KVM、XEN等)方式的不同之處,Docker容器是在操作系統層面上實現虛擬化,直接復用本地主機的操作系統,而傳統方式則是在硬件的基礎上,虛擬出自己的系統,再在系統上部署相關的APP應用。
虛擬化要運行一下Nginx軟件
下圖為傳統虛擬化方案:
如下為Docker虛擬化方案:
三、Docker虛擬化有三個概念需要理解,分別鏡像、容器、倉庫。
鏡像:docker的鏡像其實就是模板,跟我們常見的ISO鏡像類似,是一個樣板。
容器:使用鏡像常見的應用或者系統,我們稱之為一個容器。
倉庫:倉庫是存放鏡像的地方,分為公開倉庫(Public)和私有倉庫(Private)兩種形式。
Docker LXC及Cgroup
Docker最早為 LXC+AUFS組合,Docker0.9.0版本開始引入libcontainer,可以視作LXC的替代品)。其中LXC負責資源管理,AUFS負責鏡像管理;而LXC包括cgroup、namespace、chroot等組件,并通過cgroup進行資源管理。
從資源管理來看,Docker、LXC、Cgroup三者的關系是:Cgroup在最底層落實資源管理,LXC在cgroup上封裝了一層,Docker又在LXC封裝了一層,要想學好Docker,需要了解負責資源管理的CGroup和LXC。
Cgroups是control groups的縮寫,是Linux內核提供的一種可以限制、記錄、隔離進程組(process groups)所使用的物理資源(如:CPU, Memory, IO等)的機制。
最初由Google的工程師提出,后來被整合進Linux內核。Cgroups也是LXC為實現虛擬化所使用的資源管理手段,可以說沒有Cgroups就沒有LXC,也就沒有Docker。