LXC是Linux containers的简称,是一种基于容器的操作系统层级的虚拟化技术。LXC可以在操作系统层次上为进程提供的虚拟的执行环境即容器。与传统的硬件抽象层次的虚拟化技术相比有以下优势:减少虚拟化的开销;快速部署。
简言之,LXC是一款轻量级的虚拟化技术,方便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。但这并不意味着,传统的虚拟化技术将会被取代。这里将会为大家介绍如何安装、配置、管理Linux容器。
这里的系统环境为Ubuntu 14.10。(图片来自:linoxide.com)
首先要安装LXC,可执行如下命令(如若为基于红帽的centos等系统,请使用yum命令)。
sudo apt-get install lxc
通过 lxc-create命令创建一个容器。
sudo lxc-create -t <template> -n <container-name>
即
sudo lxc-create -t ubuntu -n Ubuntu1
然后等待ubuntu运行,需要要花费几分钟。
现在我们就已经有了一个ubuntu的容器。
我们来看一下现在已经拥有的容器列表。
sudo lxc-ls
poornima@poornima- Lenovo :~/$ sudo lxc-ls
[sudo] password for poornima:
Ubuntu1
查看容器使用详情。
sudolxc-info -n <container-name>
poornima@poornima- Lenovo :~/$ sudo lxc-info -n Ubuntu1
Name: Ubuntu1
State: STOPPED
可见容器的目前状态时尚未启动,我们可以启动容器。
lxc-start -n <container-name>
或者
lxc-start -d -n <container-name> to start the container in the background.
确认容器是否启动
poornima@poornima-Lenovo:~/$ sudo lxc-info -n Ubuntu1
Name: Ubuntu1
State: RUNNING
PID: 2969
IP: 10.0.3.150
CPU use: 1.27 seconds
BlkIO use: 20.66 MiB
Memory use: 26.27 MiB
KMem use: 0 bytes
Link: vethVFLSOP
TX bytes: 1.80 KiB
RX bytes: 4.94 KiB
Total bytes: 6.74 KiB
由于要登录容器,所以我们需要一个LXC控制台
lxc-console -n <container-name>
poornima@poornima-Lenovo:~/$ sudo lxc-console -n Ubuntu1
Connected to tty 1 Type <Ctrl+a q> to exit the console, <ctrl+a ctrl+a=""> to enter Ctrl+a itself
Ubuntu 14.10 Ubuntu1 tty1
Ubuntu1 login: ubuntu
Password:
Last login: Thu Aug 27 12:05:59 IST 2015 on lxc/tty1
Welcome to Ubuntu 14.10 (GNU/Linux 3.16.0-23-generic i686)
* Documentation: https://help.ubuntu.com/
ubuntu@Ubuntu1:~/$
如果你需要通知容器运行的时候,可以输入命令。
xc-stop -n <container-name>
poornima@poornima-Lenovo:~/$ sudo lxc-stop -n Ubuntu1
poornima@poornima-Lenovo:~/$ sudo lxc-info -n Ubuntu1
Name: Ubuntu1
State: STOPPED
暂停freeze、恢复unfreeze容器命令
lxc-freeze -n <container-name>
poornima@poornima-Lenovo:~/$ sudo lxc-freeze -n Ubuntu1
poornima@poornima-Lenovo:~/$ sudo lxc-info -n Ubuntu1
Name: Ubuntu1
State: FROZEN
PID: 2969
IP: 10.0.3.150
CPU use: 1.48 seconds
BlkIO use: 21.42 MiB
Memory use: 26.96 MiB
KMem use: 0 bytes
Link: vethVFLSOP
TX bytes: 2.63 KiB
RX bytes: 5.80 KiB
Total bytes: 8.43 KiB
lxc-unfreeze -n <container-name>
拷贝容器
lxc-clone -o <existing container> -n <new container>
poornima@poornima- Lenovo :~/$ sudo lxc-clone -o Ubuntu1 -n Ubuntu-clone
Created container Ubuntu-clone as copy of Ubuntu1
poornima@poornima-Lenovo:~/$ sudo lxc-ls
Ubuntu-clone Ubuntu1
关闭容器
ubuntu@Ubuntu1:~/$ sudo poweroff
[sudo] password for ubuntu:
Broadcast message from ubuntu@Ubuntu1
(/dev/lxc/tty1) at 12:17 ...
The system is going down for power off NOW!
查看容器状态
poornima@poornima-Lenovo:~/$ sudo lxc-info -n Ubuntu1
Name: Ubuntu1
State: STOPPED
快照(snapshot)的创建和恢复
lxc-snapshot -n <container-name>
poornima@poornima-Lenovo:~/$ sudo lxc-snapshot -n Ubuntu1
lxc_container: lxccontainer.c: lxcapi_snapshot: 2953 Snapshot of directory-backed container requested.
lxc_container: lxccontainer.c: lxcapi_snapshot: 2954 Making a copy-clone. If you do want snapshots, then
lxc_container: lxccontainer.c: lxcapi_snapshot: 2955 please create an aufs or overlayfs clone first, snapshot that
lxc_container: lxccontainer.c: lxcapi_snapshot: 2956 and keep the original container pristine.
这些快照将被存储在 /var/lib/lxc目录下。
poornima@poornima-Lenovo:~/$ sudo lxc-snapshot --name Ubuntu1 --list
snap0 (/var/lib/lxc/Ubuntu1/snaps) 2015:08:27 12:20:41
配置
所有已创建的容器默认存储在/var/lib/lxc目录下。
删除
你可以删除容器。如果你已经创建了快照,那么也需要将快照一同删除。
lxc-destroy -n <container-name>
poornima@poornima-Lenovo:~/$ sudo lxc-destroy --name=Ubuntu-clone
poornima@poornima-Lenovo:~/$ sudo lxc-info --name=Ubuntu-clone
Ubuntu-clone doesn't exist
运用web控制器管理容器
如果你并不习惯使用Linux命令,那么你可以选择用浏览器模式的控制器来控制自己的Linux容器。
安装相应的控制面板
wget http://lxc-webpanel.github.io/tools/install.sh -O - | bash
root@poornima-Lenovo:/home/poornima# wget http://lxc-webpanel.github.io/tools/install.sh -O - | bash
--2015-08-27 13:15:13-- http://lxc-webpanel.github.io/tools/install.sh
Resolving lxc-webpanel.github.io (lxc-webpanel.github.io)... 103.245.222.133
Connecting to lxc-webpanel.github.io (lxc-webpanel.github.io)|103.245.222.133|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2678 (2.6K) [application/x-sh]
Saving to: STDOUT
Installing requirement...
100%[======================================>] 2,678 --.-K/s in 0.003s
2015-08-27 13:15:14 (867 KB/s) - written to stdout [2678/2678]
Cloning LXC Web Panel...
Cloning into '/srv/lwp'...
remote: Counting objects: 188, done.
remote: Total 188 (delta 0), reused 0 (delta 0), pack-reused 188
Receiving objects: 100% (188/188), 172.76 KiB | 49.00 KiB/s, done.
Resolving deltas: 100% (79/79), done.
Checking connectivity... done.
Installation complete!
Adding /etc/init.d/lwp...
Done
Starting server ...done.
Connect you on http://your-ip-address:5000/
默认的用户名和密码为: admin/admin
Web界面
这样一来,就完成了对LXC的配置。同时,你可以选择使用Linux命令,或者在web端控制Linux容器