如何使用LXC管理Linux容器

时间:2020-03-05 15:28:54  来源:igfitidea点击:

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