Docker与LXC(Linux Container)的关系简介

1、LXC的简介

1.1、 Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源。

1.2、LXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C++中的NameSpace。容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。与传统虚拟化技术相比,它的优势在于:

(1)与宿主机使用同一个内核,性能损耗小;

(2)不需要指令级模拟;

(3)不需要即时(Just-in-time)编译;

(4)容器可以在CPU核心的本地运行指令,不需要任何专门的解释机制;

(5)避免了准虚拟化和系统调用替换中的复杂性;

(6)轻量级隔离,在隔离的同时还提供共享机制,以实现容器与宿主机的资源共享。

总结:Linux Container是一种轻量级的虚拟化的手段。

1.3、LXC与docker的关系

(1)Docker并不是LXC的替代品,Docker的底层就是使用了LXC来实现的。LXC将Linux进程沙盒化,使得进程之间相互隔离,并且能够控制各进程的资源分配。 
(2)在LXC的基础之上,Docker提供了一系列更强的功能。

2、LXC的安装

2.1、安装lxc 和 lxc 自带的模板包

     yum -y install lxc lxc-templates

[root@zxomc yum.repos.d]# yum -y install lxc lxc-templates
已加载插件:fastestmirror, refresh-packagekit, security
设置安装进程
Repository epel is listed more than once in the configuration
Loading mirror speeds from cached hostfile
解决依赖关系
--> 执行事务检查
---> Package lxc.x86_64 0:1.0.11-1.el6 will be 安装
--> 处理依赖关系 lua-lxc(x86-64) = 1.0.11-1.el6,它被软件包 lxc-1.0.11-1.el6.x86_64 需要
--> 处理依赖关系 lua-alt-getopt,它被软件包 lxc-1.0.11-1.el6.x86_64 需要
--> 处理依赖关系 liblxc.so.1()(64bit),它被软件包 lxc-1.0.11-1.el6.x86_64 需要
---> Package lxc-templates.x86_64 0:1.0.11-1.el6 will be 安装
--> 执行事务检查
---> Package lua-alt-getopt.noarch 0:0.7.0-1.el6 will be 安装
---> Package lua-lxc.x86_64 0:1.0.11-1.el6 will be 安装
--> 处理依赖关系 lua-filesystem,它被软件包 lua-lxc-1.0.11-1.el6.x86_64 需要
---> Package lxc-libs.x86_64 0:1.0.11-1.el6 will be 安装
--> 执行事务检查
---> Package lua-filesystem.x86_64 0:1.4.2-1.el6 will be 安装
--> 完成依赖关系计算

依赖关系解决

=================================================================================================================================================================================
 软件包                                         架构                                   版本                                           仓库                                  大小
=================================================================================================================================================================================
正在安装:
 lxc                                            x86_64                                 1.0.11-1.el6                                   epel                                 124 k
 lxc-templates                                  x86_64                                 1.0.11-1.el6                                   epel                                  82 k
为依赖而安装:
 lua-alt-getopt                                 noarch                                 0.7.0-1.el6                                    epel                                 6.9 k
 lua-filesystem                                 x86_64                                 1.4.2-1.el6                                    epel                                  24 k
 lua-lxc                                        x86_64                                 1.0.11-1.el6                                   epel                                  16 k
 lxc-libs                                       x86_64                                 1.0.11-1.el6                                   epel                                 257 k

事务概要
=================================================================================================================================================================================
Install       6 Package(s)

总下载量:510 k
Installed size: 1.3 M
下载软件包:
(1/6): lua-alt-getopt-0.7.0-1.el6.noarch.rpm                                                                                                              | 6.9 kB     00:00
(2/6): lua-filesystem-1.4.2-1.el6.x86_64.rpm                                                                                                              |  24 kB     00:00
(3/6): lua-lxc-1.0.11-1.el6.x86_64.rpm                                                                                                                    |  16 kB     00:00
(4/6): lxc-1.0.11-1.el6.x86_64.rpm                                                                                                                        | 124 kB     00:00
(5/6): lxc-libs-1.0.11-1.el6.x86_64.rpm                                                                                                                   | 257 kB     00:00
(6/6): lxc-templates-1.0.11-1.el6.x86_64.rpm                                                                                                              |  82 kB     00:00
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
总计                                                                                                                                             469 kB/s | 510 kB     00:01
运行 rpm_check_debug
执行事务测试
事务测试成功
执行事务
  正在安装   : lxc-libs-1.0.11-1.el6.x86_64                                                                                                                                  1/6
/sbin/ldconfig: /lib/libuuid.so.1 不是符号连接

/sbin/ldconfig: /lib/libext2fs.so.2 不是符号连接

/sbin/ldconfig: /lib/libattr.so.1 不是符号连接

/sbin/ldconfig: /lib/libpamc.so.0 不是符号连接

/sbin/ldconfig: /lib/libvolume_id.so.0 不是符号连接

/sbin/ldconfig: /lib/libaudit.so.0 不是符号连接

/sbin/ldconfig: /lib/libacl.so.1 不是符号连接

/sbin/ldconfig: /lib/libdbus-1.so.3 不是符号连接

/sbin/ldconfig: /lib/libgmodule-2.0.so.0 不是符号连接

/sbin/ldconfig: /lib/libasound.so.2 不是符号连接

/sbin/ldconfig: /lib/libtermcap.so.2 不是符号连接

/sbin/ldconfig: /lib/libauparse.so.0 不是符号连接

/sbin/ldconfig: /lib/libblkid.so.1 不是符号连接

/sbin/ldconfig: /lib/libgobject-2.0.so.0 不是符号连接

/sbin/ldconfig: /lib/libpam_misc.so.0 不是符号连接

/sbin/ldconfig: /lib/libe2p.so.2 不是符号连接

/sbin/ldconfig: /lib/libpam.so.0 不是符号连接

/sbin/ldconfig: /lib/libss.so.2 不是符号连接

/sbin/ldconfig: /lib/libexpat.so.0 不是符号连接

/sbin/ldconfig: /lib/libcom_err.so.2 不是符号连接

/sbin/ldconfig: /lib/libgthread-2.0.so.0 不是符号连接

/sbin/ldconfig: /lib/libwrap.so.0 不是符号连接

/sbin/ldconfig: /lib/libcap.so.1 不是符号连接

/sbin/ldconfig: /lib/libglib-2.0.so.0 不是符号连接

  正在安装   : lua-filesystem-1.4.2-1.el6.x86_64                                                                                                                             2/6
  正在安装   : lua-lxc-1.0.11-1.el6.x86_64                                                                                                                                   3/6
  正在安装   : lua-alt-getopt-0.7.0-1.el6.noarch                                                                                                                             4/6
  正在安装   : lxc-1.0.11-1.el6.x86_64                                                                                                                                       5/6
  正在安装   : lxc-templates-1.0.11-1.el6.x86_64                                                                                                                             6/6
  Verifying  : lxc-1.0.11-1.el6.x86_64                                                                                                                                       1/6
  Verifying  : lua-lxc-1.0.11-1.el6.x86_64                                                                                                                                   2/6
  Verifying  : lxc-libs-1.0.11-1.el6.x86_64                                                                                                                                  3/6
  Verifying  : lxc-templates-1.0.11-1.el6.x86_64                                                                                                                             4/6
  Verifying  : lua-alt-getopt-0.7.0-1.el6.noarch                                                                                                                             5/6
  Verifying  : lua-filesystem-1.4.2-1.el6.x86_64                                                                                                                             6/6

已安装:
  lxc.x86_64 0:1.0.11-1.el6                                                          lxc-templates.x86_64 0:1.0.11-1.el6

作为依赖被安装:
  lua-alt-getopt.noarch 0:0.7.0-1.el6           lua-filesystem.x86_64 0:1.4.2-1.el6           lua-lxc.x86_64 0:1.0.11-1.el6           lxc-libs.x86_64 0:1.0.11-1.el6

完毕!

2.2、检测环境

lxc-checkconfig  :此命令用于检测当前系统配置是否满足创建 container的要求,如果输出所有项均为enbale状态,则表明内核支持lxc容器,否则需重新编译内核打开相应功能项。具体如何编译内核此文暂不涉及,有需要的可以网上找其他文献。

lxc-checkconfig
Kernel configuration not found at /proc/config.gz; searching...
Kernel configuration found at /boot/config-3.10.5-3.el6.x86_64
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: missing
Network namespace: enabled
Multiple /dev/pts instances: enabled

--- Control groups ---
Cgroup: enabled
Cgroup clone_children flag: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled

--- Misc ---
Veth pair device: enabled
Macvlan: enabled
Vlan: enabled
Bridges: enabled
Advanced netfilter: enabled
CONFIG_NF_NAT_IPV4: enabled
CONFIG_NF_NAT_IPV6: enabled
CONFIG_IP_NF_TARGET_MASQUERADE: enabled
CONFIG_IP6_NF_TARGET_MASQUERADE: enabled
CONFIG_NETFILTER_XT_TARGET_CHECKSUM: enabled

--- Checkpoint/Restore ---
checkpoint restore: missing
CONFIG_FHANDLE: enabled
CONFIG_EVENTFD: enabled
CONFIG_EPOLL: enabled
CONFIG_UNIX_DIAG: enabled
CONFIG_INET_DIAG: enabled
CONFIG_PACKET_DIAG: enabled
CONFIG_NETLINK_DIAG: enabled
File capabilities: enabled

Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig

2.3创建一个名为myContainer的容器,模板名称为/usr/share/lxc/template/lxc-centos

# lxc-create -n myContainer -t /usr/share/lxc/template/lxc-centos

# lxc-create -n myContainer -t /usr/share/lxc/template/lxc-centos
lxc_container: utils.c: get_template_path: 1106 No such file or directory - bad template: /usr/share/lxc/template/lxc-centos
lxc_container: lxccontainer.c: lxcapi_create: 1231 bad template: /usr/share/lxc/template/lxc-centos
lxc_container: lxc_create.c: main: 274 Error creating container myContainer

上述错误的主要原因是:没有lx-centos的模板

# lxc-create -n myContainer
A template must be specified.
Use "none" if you really want a container without a rootfs.
[root@zxomc yum.repos.d]# lxc-create -n myContainer -t none

使用 -t none 表示不为此容器创建使用的模板。

2.4创建一个myContainer的容器后,我们可以使用lxc-info -n myContainer命令查看此容器的信息

 lxc-info -n myContainer
Name:           myContainer
State:          STOPPED

新创建的容器位于/var/lib/lxc/ 目录下。

此处需要注意,由于创建容器时没有指定模板,所以创建的容器没有rootfs相关信息。由于模板是一个脚本文件,执行了一系列操作,包括创建容器的时候挂载文件系统,配置网络,安装必要软件,创建用户/属组,设置密码等。所以一旦我们没有指定模板,那么创建的容器便无法正常使用。

 

2.5 此时使用  lxc-start -n myContainer命令尝试启动一个容器时,会遇到如下错误:

lxc-start -n myContainer
lxc-start: conf.c: instantiate_veth: 3115 failed to attach 'vethLOMVGD' to the bridge 'virbr0': No such device
lxc-start: conf.c: lxc_create_network: 3407 failed to create netdev
lxc-start: start.c: lxc_spawn: 875 failed to create the network
lxc-start: start.c: __lxc_start: 1149 failed to spawn 'myContainer'
lxc-start: lxc_start.c: main: 336 The container failed to start.
lxc-start: lxc_start.c: main: 340 Additional information can be obtained by setting the --logfile and --logpriority options.

上述错误的主要原因是没有virbr0网桥。

解决上述错误的方法时创建此virbr0网桥,具体方法如下:

(A)下包

# yum install bridge-utils -y

(B)查看网桥信息

# brctl show

(C)创建virbr0 网桥

# brctl addbr virbr0

(D)查看网桥创建成功

# ip a |grep virbr0

(E)激活网桥

# ip link set dev virbr0 up

# ip a 查询是否激活  

(F)配置网桥地址

# ip addr add 10.1.0.1/24 dev virbr0

2.6 lxc的简单命令

(1)lxc-checkconfig:

  检查系统环境是否满足容器使用要求;

(2)lxc-create:创建lxc容器;

     lxc-create  -n name [-f config_file] [ -t template] 
创建一个系统对象来存储配置和用户信息,该对象保存/var/lib/lxc(注意该目录为版本相关的,不同版本的lxc可能不同)目录下,name为其标示符。如果配置文件未指定,则系统会支持默认的资源隔离:PID,sysv IPC和挂载点。 

默认创建的config文件的内容:

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = virbr0

(3)lxc-start:启动容器;

  lxc-start -n NAME 

(4)lxc-stop:停止容器;(停止命令很慢)

  lxc-stop -n NAME 

      关闭一个容器。与lxc-start类似,要stop的容器必须是已经lxc-create并且lxc-start的

(5)lxc-info:查看容器相关的信息;

  lxc-info -n NAME

(6)lxc-destory:删除处于停机状态的容器;

    彻底删除一个容器,与之相关的一切数据都不可用

(7)lxc-snapshot:创建和恢复快照;

(8)冻结该容器所有的进程。进程会被锁定,直到lxc-unfreeze进行解锁。
         lxc-freeze -n name
(9)用于解除被lxc-freeze冻结的容器进程。
         lxc-unfreeze -n name

你可能感兴趣的:(运维开发,Docker,LXC,Linux,Container)