容器概念與Linux Container原理
一、容器與LxC
在像KVM等眾多主機虛擬化解決方案中,對每一個虛擬機器例項提供的是從底層硬體開始一直到上層的環境,在硬體級進行資源劃分。虛擬機器的核心是執行在硬體核心之上的。由於每個虛擬例項都有自己的執行核心,所以各例項之間有非常好的隔離性。
但在某些場景中使用KVM等虛擬機器過於笨重,例如使用者僅僅只是需要在使用者空間執行某一個程式,沒有必要管理使用者空間核心再到系統核心,可以將使用者空間核心剝離掉,直接由系統空間提供執行程式的許可權即可,也就是說在一個核心空間上構建出相互隔離的空間,用一種可以將各使用者空間在同一核心級中會互相產生干擾的方式隔離出來,也就是說在使用者空間就做到各個空間互相隔離,這就是容器的概念。
使用者空間中可以只跑一個程序,也可以在一個使用者空間中跑多個程序。跑多個程序時容器的功能就類似與主機虛擬化技術,LxC就是這一種在使用者空間上就相互隔離的虛擬化容器技術。而另一種容器技術中,每個使用者空間只負責執行一個程序且相互隔離。這樣每一個程序所依賴的環境在各個容器中的相互獨立。
下面是Wiki對LXC的解釋:
LXC (Linux Containers) is an operating-system-level virtualization method for running multiple isolated Linux systems (containers) on a control host using a single Linux kernel.
The Linux kernel provides the cgroups functionality that allows limitation and prioritization of resources (CPU, memory, block I/O, network, etc.) without the need for starting any virtual machines, and also namespace isolation functionality that allows complete isolation of an applications' view of the operating environment, including process trees, networking, user IDs and mounted file systems.
二、安裝LxC和簡單使用
yum install -y lxc lxc-templates
簡單使用:
lxc-checkconfig :檢查系統環境是否滿足容器使用要求;
lxc-create :建立lxc容器;
例: lxc-create -n NAME -t TEMPLATE_NAME
lxc-start :啟動容器;
例: lxc-start -n NAME -d
Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself
lxc-info :檢視容器相關的資訊;
例: lxc-info -n NAME
lxc-info -n NAME :附加至指定容器的控制檯;
例: lxc-console -n NAME -t NUMBER
lxc-stop :停止容器;
lxc-destory :刪除處於停機狀態的容器;
lxc-snapshot :建立和恢復快照;