使用Vagrant和KVM 或者Hyper-V我們可以建構和運作虛拟機。相關的工具比如 ansible, chef 或者puppet可以用來進行環境的設定和配置。

虛拟機和Docker都能夠給一台主控端上的應用提供隔離的運作環境。差別是什麼呢?
從上圖右邊虛拟機架構圖能看出,虛拟機裡在宿主作業系統和實體硬體之間多了一個中間層:Hypervisor。
Hypervisor是一種運作在實體伺服器和作業系統之間的中間軟體層,可允許多個作業系統和應用共享一套基礎實體硬體,事實上成為虛拟環境中的“元”作業系統,Hypervisor可以協調通路伺服器上的所有實體裝置和虛拟機,也稱為虛拟機螢幕(Virtual Machine Monitor)。Hypervisor是所有虛拟化技術的核心。當伺服器啟動并執行Hypervisor時,它會給每一台虛拟機配置設定适量的記憶體、CPU、網絡和磁盤,并加載所有虛拟機的客戶作業系統,每台虛拟機有自己的虛拟作業系統和存儲空間,是以需要消耗主控端大量的實體資源,同時也需要花費一定時間來啟動。
而上圖左邊,Docker直接運作在主控端的作業系統上,沒有Hypervisor這個中間層。Docker實際上就是運作于作業系統上的普通程序,通過Linux Primitives實作的彼此隔離,但是共享同一個作業系統核心。
正因為這種共享性,使得Docker的資源占用遠小于虛拟機,而且啟動速度也遠遠快于虛拟機。