如何使用LXC管理Linux容器
Linux容器是操作系统级别的轻量级虚拟化技术,能够在Linux主机上运行多个Linux系统。
它是KVM和Xen等其他传统管理程序的替代方案。
与全机虚拟化技术相比,容器中提供的隔离较少,但同时由于虚拟机共享了一部分主机内核和操作系统实例,因此减少了开销。
这并不意味着容器可以代替传统的虚拟机管理程序,因为每个都有各自的优缺点。
在本文中,我们将简要了解一个流行的基于Linux的容器项目LXC的安装和使用。
安装LXC
对于此处使用的所有示例,我都使用Ubuntu 14.10.
可以通过在基于Debian的发行版(基于RedHat的发行版中使用yum)中使用简单的apt-get命令来安装LXC。
如果我们没有以root用户身份登录,请确保在所有地方都使用“ sudo”命令。
sudo apt-get install lxc
创建,列出,登录和停止容器
接下来,我们需要使用lxc-create命令创建一个容器
sudo lxc-create -t <template> -n <container-name>
有很多现成的模板可用于创建容器。
它们主要用于流行的Linux发行版。
让我们尝试创建一个基于Ubuntu的容器。
sudo lxc-create -t ubuntu -n Ubuntu1
我们可能想帮自己喝杯咖啡,因为需要一些时间来检索所需的包装并创建容器。
:)
'lxc-create'命令的输出
'lxc-create'命令的输出续...
现在,我们有了一个名为Unbuntu1的Ubuntu容器。
现在让我们列出主机上存在的所有容器。
sudo lxc-ls
poornima@poornima-Lenovo:~$sudo lxc-ls [sudo] password for poornima: Ubuntu1
我们可以使用lxc-info查看完整的详细信息
sudolxc-info -n <container-name>
poornima@poornima-Lenovo:~$sudo lxc-info -n Ubuntu1 Name: Ubuntu1 State: STOPPED
从输出中,我们可以看到主机上存在的所有容器的列表,这些容器根据它们所处的不同状态(运行,停止或者冻结)进行了分类。
可以使用lxc-start命令启动容器。
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-console。
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 2014 on lxc/tty1 Welcome to Ubuntu 14.10 (GNU/Linux 3.16.0-23-generic i686) * Documentation: https://help.ubuntu.com/ ubuntu@Ubuntu1:~$
我们可以使用q后面的按键序列“ Ctrl + a”返回到主机控制台。
请注意,该容器仍在后台运行,并且我们刚刚与之分离。
如果必须停止容器,则需要使用lxc-stop。
lxc-stop -n <container-name>
poornima@poornima-Lenovo:~$sudo lxc-stop -n Ubuntu1 poornima@poornima-Lenovo:~$sudo lxc-info -n Ubuntu1 Name: Ubuntu1 State: STOPPED
冻结,解冻,克隆和关闭电源
可以使用lxc-freeze命令冻结容器。
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解冻它们。
lxc-unfreeze -n <container-name>
甚至可以使用lxc-clone命令克隆容器。
但是在发出clone命令之前,请确保如前所述,首先使用lxc-stop命令停止正在运行的容器。
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
要关闭容器电源,请在容器控制台中使用lxc poweroff。
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
快照-创建和还原
lxc-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.
这些快照将存储在Ubuntu 14.10中的/var/lib/lxc下。
在某些早期版本中,我们可以在/var/lib/lxcsnaps中找到它们。
poornima@poornima-Lenovo:~$sudo lxc-snapshot --name Ubuntu1 --list snap0 (/var/lib/lxc/Ubuntu1/snaps) 2014:08:27 12:20:41
配置选项
默认情况下,所有使用lxc创建的容器都存储在/var/lib/lxc下,其中每个容器都有一个目录。
在此目录中,每个容器配置将存储在一个名为config的文件中。
选项lxc.rootfs指定容器根文件系统的位置。
lxc。
network.type指定该容器使用的网络类型。
例如,veth
如果我们对更多配置选项感兴趣,请查看man 5 lxc.conf。
删除中
使用lxc-destroy命令可以从主机中完全销毁容器。
如果已从要删除的容器中创建了任何快照,则需要首先将其删除。
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命令行,则可以通过浏览器使用LXC Web面板管理容器。
以root用户身份使用以下命令安装Web面板。
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 --2014-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 0% [ ] 0 --.-K/s _ __ _______ __ __ _ _____ _ | | \ \//____| \ \//| | | __ \ | | | | \ V/| \ \ /\//__| |__ | |__) |_ _ _ __ ___| | | | > <| | \ \/\//_ \ '_ \ | ___/_` | '_ \/_ \ | | |____/. \ |____ \ /\/__/|_) | | | | (_| | | | | __/| |______/_/______| \/\/___|_.__/|_| __,_|_| |_|___|_| Automatic installer Installing requirement... 100%[======================================>] 2,678 --.-K/s in 0.003s 2014-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/
然后,我们可以使用以下URL访问用户界面:http://:5000,使用默认用户名/密码admin/admin