Docker 運行應用程式的環境被稱作 容器 (container) 。它不像虛擬機器 (virtual machine) 一樣需要 虛擬機器監視器 (hypervisor) 模擬出軟體、韌體或硬體,反而直接運行在宿主機(host machine)的核心。以執行應用程式的運行來說,虛擬機器需要模擬出整套作業系統才能運行應用程式,而應用程式容器則是直接運行在宿主機上。不僅如此,宿主機也可以是虛擬機器。因此,它比虛擬機器又更為輕量級、執行啟動又更快。
Docker 是個管理容器(container)的服務,提供**「應用層級」的虛擬化技術**(不同於OS層級虛擬化的虛擬機)。藉由 Linux 內核的 cgroup、namespace,以及 UnionFS 等技術,來達到應用程式的資源限制與封裝隔離。
換句話說,容器不像虛擬機要在 Host OS 上再安裝 Guest OS,而可以直接共用底層 Host OS 的資源,同時具備其應用程式沙盒的隔離性(不受 Host OS 與其他容器的影響)。而 Docker 就是幫我們達到這項技術的服務,於是我們得以遠離直接操作底層的辛苦活兒。
虛擬機 vs Docker 圖:
相較於虛擬機,Docker的優勢: