LXC (Linux Containers)

虛擬化的種類很多 Full Virtualization (Paravirtualization , Hardware-assisted virtualization) , OS-Level Virtualization ,那 LXC 算是哪種虛擬化?

LXC 提供類似於作業系統層級的虛擬化 OS-Level Virtualization ,先來看看之前所謂的 作業系統層級的虛擬化 .
hosted_vm
作業系統層級的虛擬化是透過 VMM (Virtual Machine Monitor,也可以稱作 Hybervisor) 建立一個虛擬化的環境給虛擬機的作業系統來使用,幾乎所有的作業系統我們都可以透過這樣的方式模擬出來,但相對的是效能差以及消耗過多的系統資源.

LXC 與 KVM 一樣的做法 (Linux 核心加入 KVM 再讓這 Linux 核心當作 VMM ,在 KVM 下的 Guest OS 對於 Linux 核心而言都只是一個 Process 行程).

LXC 採用類似的方式在原作業系統中透過資源共享的方式,建立出一個獨立空間給另外一個作業系統來使用,它有屬於自己的 file system, process 與 block I/O ,network 空間,這邊不再稱它為虛擬機器 Virtual Machine 而是叫做 Container.

lxc01
從 Linux 核心 2.6.24 之後的版本內建了 Control Group 和 Name spaces 機制,這些機制讓 LXC 可以分配 Host OS 的資源給 Containers.這種做法跟 chroot 類似.但 LXC 多了 IP address, a separate process domain, user ids 以及 dedicated access to the host’s physical resources (i.e. memory, CPU) .

那什麼是 Control Group 和 Name spaces ?

  1. cgroups (Control Group) 可以針對 Container 下的資源(CPU , Memory , Block I/O , network , etc.)進行限制和優先順序.
  2. Namespace (Name spaces) 提供了 Container 彼此之間與作業系統是完全隔離且不受影響的, 提供 pid (Process ID) , network , IPC (interprocess communication) , mount , UTS (UNIX Time-sharing System) , User 等 namespace.

KVM 與 LXC 的差別!
主要的差別是 KVM 的虛擬機器還需要安裝作業系統之後才能執行應用程式,而 Container 與 Linux Kernel 共享核心,只需要相關程式碼 (Binaries),函式庫 (libraries),以及 根目錄架構 所建立出來的獨立環境,就可以開始執行應用程式.
kvm_lxc01
在第一次新增 Ubuntu container 就會自行透過網路下載所需的 程式碼 (Binaries),函式庫 (libraries),以及 根目錄架構 環境,因為都已經打包好下載之後就可以接執行 Container,不需要額外的安裝作業系統等工作.

root@ubuntu:~# lxc-create -n ubuntu-1 -t ubuntu
Checking cache download in /var/cache/lxc/trusty/rootfs-i386 ... 
Installing packages in template: ssh,vim,language-pack-en
Downloading ubuntu trusty minimal ...

關於 LXC 的使用請參考 http://benjr.tw/93708

4 thoughts on “LXC (Linux Containers)

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *