Container 初探

Posted by Mr. D-Day

相信大部分的讀者對於「虛擬化」應該不陌生,諸如 VMware、Parallels、VirtualBox 等虛擬化技術產品已經相當成熟,並且廣泛的用在伺服器佈署的領域,甚至是個人電腦中也很常見。那什麼是 Container 呢?它是另外一個虛擬化軟體嗎?還是航向另一個新世界的?


虛擬化(Virtualization)

目前比較常見的虛擬化產品大多採用全虛擬化(Full virtualization)的技術上來說,全虛擬化做的作法,就是在主機先上執行一個模擬程式(Hypervisor),模擬所有的硬體,讓虛擬機完全執行在 Hypervisor 之上。從使用角度來說,在全虛擬化之下,你可以裝任何一種作業系統,不管是 Windows、Linux 還是 MacOS。半虛擬化(Paravirtualization)技術,則是透過修改作業系統核心的方式,讓虛擬機呼叫取代過的 System Call,透過這個方式存取主機資源,從使用的角度來看,在半虛擬化之下,你只能安裝與主機相同的作業系統,例如:在 Linux 的環境之下,虛擬機也只能是 Linux。

那 Container 技術呢?Container 利用了作業系統核心具備的 namespace 功能,把 process、network 等資源隔離開來。在 Container 之下運行的程式,看似是在一個獨立的環境之下,實際上則是共享同一個作業系統核心,但是Process 及 I/O 資源則被獨立隔離開來。從使用的角度來看,在 Container 虛擬化之下,與半虛擬化的特性相同,你只能安裝與主機相同的作業系統。

作業系統

我認為,基本上只要作業系統核心(Kernel)能夠支援把資源隔離(Isolated)開來的技術,就能夠實現 Container 虛擬化。在 Linux 裡面有 DockerLXC ContainerOpenVZ。在 FreeBSD 裡面有 FreeBSD VPS projectDocker on FreeBSD。連 Microsoft Windows 都有 Windows Server ContainerHyper-V Container 了。

但是一個作業系統包含的不只是 kernel 而已,更包含了應用,雖然對 Ubuntu 來說,只要裝了像 Docker 這種軟體,就可以開始翱翔在 Container 的世界,但是如果能有像 CoreOS 完全是針對 Linux Container 訂製的作業系統,就更棒了,它不只能作為一個 Container Host,搭配內建的各種 application,更能進一步管理整個 Container 叢集(Cluster)。

叢集(Cluster)

事實上,Container 比起全虛擬化技術,更重要的用途應該是在 Cluster 之上。因為 Container 透過作業系統核心層級的資源隔離,因此它比全虛擬化技術,能更有效利用實體機的資源。Container 能幫助我們的是,如何快速且大量的佈建(Depoly)應用程式服務。像是 KubernetesDocker SwarmCoreOS on fleet都是幫助解決這個問題的工具。

準備好將你的應用 Containerize 了嗎?就從時下最火紅的 Docker 開始吧!

喜歡這篇文章嗎? 分享出去給作者一點鼓勵吧!