LXC-Linux Containers介绍
Linux Containers,Linux的容器,容器嘛,可以想象成一个大的装东西的罐子,罐子口很大,里面可以装很多同样形状,只不过大小不同的小罐子。专业的话,叫做基于容器的操作系统层面的虚拟化技术。
在这个大的容器里面,可以装很多小的容器,每一个容器都具备完整的运行环境,如特定的CPU、memory节点、可分配的cpu时间,IO时间,受限的内存大小(包括内存和SWAP),提供对底层设备的访问,拥有独立的namespace(网络、pid、ipc、mmt和uts)。
LXC项目地址:https://linuxcontainers.org/
LXC在github上的地址:https://github.com/lxc/lxc
一个LXC的实例,我们称之为container,类比于PC机器上面的Virtual Box和Vmware。
LXC具体组成
LXC项目在Sourceforge上面的,它有一个Linux内核补丁和一些用户空间的工具组成,其中内核补丁提供底层新特性,上层工具使用这些新特性,提供一套简化的工具来维护容器。
LXC在资管管理方面,依赖与Linux内核密切相关的Cgroups子系统,这个子系统是Linux内核提供的一个基于进程组的资源管理框架,可以为特定的进程组限定可以使用的资源,借助cgroups子系统,在当前Linux环境下,实现一个轻量化的虚拟机。
LXC在隔离控制方面,依赖于Linux内核提供的namespace特性,具体来说,就是在clone的时候加入相应的flag。
LXC的优势
LXC是操作系统层面的虚拟化技术,与传统的HAL层次的虚拟化技术相比,有以下优势:
1. 更小的虚拟化开销。LXC的诸多特性基本有内核提供
2. 快速部署。只需要安装LXC,就可以利用LXC的相关命令来创建并且启动容器,为应用提供虚拟执行环节。而传统的虚拟化技术,需要先创建虚拟机,然后安装系统,再部署应用。
3. 虚拟机的rootfs就在/var/lib/lxc/container_name ,可以在宿主机上轻松修改container的文件系统。
4. LXC使用apparmor,应用程序访问控制系统来确保主机不受容器内实例的恶意行为。
LXC的缺点
1. 缺少对磁盘限额(disk quota)的支持,目前使用LVM来限定支持。
2. 缺少对写时复制(copy on write)的支持,对于每个容器来说,都是一份操作系统的用户态实例,都有属于自己的系统库函数文件等必需文件。在一个系统有多个容器的情况下,这会造成磁盘空间的浪费。这里可以借鉴写时复制的概念,对于容器共用的文件,在没有对共享文件进行写入之前,可以只保存一份拷贝,其他容器采用硬链接的方式来共享,当有容器对共享文件进行写入时,为其单独创建一份拷贝。
3. 进程和容器之间的动态关联还不够完善
理想情况下,进程和容器之间是动态关联的,进程可以在容器之间迁移。在LXC中,资源管理是通过cgroups实现的,进程可以在cgroup之间有条件的迁移。命名空间的隔离是通过namespace实现的,目前内核只支持进程变更有限的几类命名空间。
4. 不支持checkpoint
checkpoint技术可以将容器中所有的进程暂时frozen,将当时容器完整的状态存储在磁盘上,类似于Vmware的snapshot,目前LXC不支持checkpoint技术,只是借助cgroups的freezer子系统,将进程暂时frozen和resume,没有完整的存储容器的状态。
5. 不支持容器的动态迁移
动态迁移是指将正在运行的容器从一个机器上迁移到另一个机器上,在此过程中,容器中的进程无需停止,此项技术可以用来优化服务器集群的资源配置。目前LXC不支持动态迁移。
LXC安装使用
在Ubuntu系统下,可以使用apt命令来安装或者使用源码来安装,建议使用apt来安装,这种方式在安装过程中会自动安装LXC所依赖的其他软件.
在正确使用lxc之前,需要对其配置文件进行简单的介绍,以便更好的理解LXC的工作原理.
a. /etc/lxc/lxc.conf 创建lxc容器的时候默认使用的配置文件,默认内容如下。
b. /usr/lib/lxc/templates/ 该目录保存当前LXC支持的各种发行版本的Linux模板配置文件
c. /var/lib/lxc/ 该目录存放每个创建的容器实例,只有root用户才有权限访问其内容
d. /var/cache/lxc 该目录存放容器实例的cache,加快容器实例创建速度。
LXC根据容器类型的不同而有所不同,一种是系统容器,一种是应用程序容器。系统容器类似于虚拟机,
lxc-start –n name init ,运行init程序。
应用程序容器只是创建用于隔离一个应用程序的单独的命名空间,类似的命令,lxc-execute –n name cmd
LXC常用命令
1. lxc-checkconfig 用于判断Linux内核是否支持LXC
2. lxc-create 用于创建一个容器
lxc-create –n name [ –f config_file ]
name 创建的容器名称
config_file 容器配制文件的路径
备注: 容器名称是全局的,也就是说,系统不允许存在重名的容器。lxc-create创建的容器,在停止运行后,不会自动销毁。
3. lxc-destroy 用于销毁一个容器
4. lxc-execute 用于在一个容器执行应用程序
lxc-execute –n name [ –f config_file] [ –s KEY=VAL ] command
name 容器名称
config_file 容器配制文件路径
-s 后面跟配制键值对 例如 lxc.cgroup.cpu.shares = 512
command 待执行的命令
备注:如果不存在name容器,lxc-execute会自动创建一个,容器停止运行后会自动销毁。
执行过程中,有限选用 –f 指定的配置文件参数。 -s选项可以特别改变配置文件中的某一项参数值。
lxc-execute 先创建lxc-init进程,然后在lxc-init中fork一个进行来执行命令,常用于在容器中执行应用程序。
5. lxc-start 用于在容器中执行给定命令
lxc-start –n name [-f config_file ] [-c console_file ] [-d] [-s KEY=VAL] [command]
-d : 将容器当做守护进程执行
-c : 指定一个文件作为容器的控制台输出,默认为终端
备注:如果容器还不存在,lxc-start会自动创建一个,容器停止允许后会自动销毁。它是直接创建进程来运行命令。
lxc-start 用于在容器中启动system
6. lxc-kill 用于发送信号给容器中的第一个用户进程(容器内部进程号为1的为init,进程号为2的为第一个用户进程),默认信号为SIGKILL。
lxc-kill –n name [SIGNUM]
7. lxc-stop 用于停止容器中所有的进程
lxc-stop –n name
8. lxc-destroy 用于销毁容器
lxc-destroy –n name
9. 其他命令,等到需要的时候再补充。
使用上述命令,需要root权限来执行。
在成成的虚拟机容器中,有config配置文件,可以在里面添加针对这个虚拟机的各种资源限制范围。
经验总结
1. 创建虚拟机,需要以root权限来创建和执行上述相关的命令
2. 当尝试在容器中执行命令出现如下错误时,
由于LXC采用cgroup对容器进行资源管理,在实际使用lxc之前,必须执行mount none –t cgroup /cgroup 来挂载cgroup系统,或者将此命令写到/etc/fstab中,让系统每次启动时,自动挂载cgroup。
解决方法: https://groups.google.com/forum/#!topic/ns-3-users/brjBDmGU4PE
Cgroup部分的配置都是以lxc.cgroup.[subsystem name].key=value的形式出现的.例如:
lxc.cgroup.cpu.shares=512
lxc.cgroup.cpuset.cpus=1.2
cgroup下面有cpu子系统、cpuset子系统、memory子系统、blkio子系统、network部分、rootfs部分这些来设置。
LXC-Linux Containers介绍的更多相关文章
- 虚拟化–操作系统级 LXC Linux Containers内核轻量级虚拟化技术
友情提示:非原文链接可能会影响您的阅读体验,欢迎查看原文.(http://blog.geekcome.com) 原文地址:http://blog.geekcome.com/archives/288 软 ...
- LXC linux容器简介——在操作系统层次上为进程提供的虚拟的执行环境,限制其使用的CPU和mem等资源,底层是linux内核资源管理的cgroups子系统
1.LXC是什么? LXC是Linux containers的简称,是一种基于容器的操作系统层级的虚拟化技术. 2.LXC可以做什么? LXC可以在操作系统层次上为进程提供的虚拟的执行环境,一个虚拟的 ...
- LXC(LinuX Container)之namespaec和cgroup
LXC(LinuX Container)之namespaec和cgroup namespace概述 从操作系统级上实现了资源的隔离,它本质上是宿主机上的进程(容器进程),所以资源隔离主要就是指进程资源 ...
- 2.LXC和namespace介绍
lxc介绍 LXC又名Linux container,是一种虚拟化的解决方案,这种是内核级的虚拟化.(主流的解决方案Xen ,KVM, LXC) Linux Container容器是一种内核虚拟化技术 ...
- 01 Linux入门介绍
一.Linux 初步介绍 Linux的优点 免费的,开源的 支持多线程,多用户 安全性好 对内存和文件管理优越 系统稳定 消耗资源少 Linux的缺点 操作相对困难 一些专业软件以及游戏支持度不足 L ...
- Linux Epoll介绍和程序实例
Linux Epoll介绍和程序实例 1. Epoll是何方神圣? Epoll但是当前在Linux下开发大规模并发网络程序的热门人选,Epoll 在Linux2.6内核中正式引入,和select类似, ...
- Linux入门介绍
Linux入门介绍 一.Linux 初步介绍 Linux的优点 免费的,开源的 支持多线程,多用户 安全性好 对内存和文件管理优越 系统稳定 消耗资源少 Linux的缺点 操作相对困难 一些专业软件以 ...
- Linux 系统目录介绍
bin : bin 是Binary 二进制的缩写,就是可执行文件了.Bin目录下是用户常用的命令. sbin: 此目录下也是二进制文件 ,不过这里的命令是 超级用户如 root 这样的用户使用的. e ...
- Linux命令介绍
资料链接:(Linux基本命令介绍)http://note.youdao.com/share/?id=36c07917f8d3e6437c1e764c3516a3f2&type=note#/ ...
随机推荐
- Thread+Handler 线程 消息循环(转载)
近来找了一些关于android线程间通信的资料,整理学习了一下,并制作了一个简单的例子. andriod提供了 Handler 和 Looper 来满足线程间的通信.例如一个子线程从网络上下载了一副图 ...
- [AngularJS] Lazy Loading modules with ui-router and ocLazyLoad
We've looked at lazy loading with ocLazyLoad previously, but what if we are using ui-router and want ...
- Office 365 Certificate Exam Resources
70-321 Deploying Office 365 Deploying Office 365 Jump Start (01): Infrastructure Planning Deploying ...
- Android 滑动效果高级篇(七)—— 华丽翻页效果
By 何明桂(http://blog.csdn.net/hmg25) 转载请注明出处 之前看到像ipad上的ibook的模拟书籍翻页的特效感觉很炫,在android上也有像laputa和ireader ...
- VS2010打开就自动关闭问题解决
前段时间开发没有使用VSS,打开项目一直正常,后来嵌入到VSS后出现了VS2010打开后就自动关闭的问题. 刚开始我重新卸载.安装了VS2010,但是还是有问题,后来重新创建了空解决方案,再次引入就正 ...
- 利用 Composer 一步一步构建自己的 PHP 框架(四)——使用 ORM
本教程示例代码见 https://github.com/johnlui/My-First-Framework-based-on-Composer 回顾 经过前三篇文章 基础准备 . 构建路由 和 设计 ...
- Ubuntu中useradd和adduser的区别
在Ubuntu中创建新用户,通常会用到两个命令:useradd和adduser,虽然作用一样,但用法却不尽相同.本文接下来便为读者带来具体的解释. AD:51CTO学院:IT精品课程在线看! 在Ubu ...
- AJAX XMLHttpRequest
<html> <head> <title>XMLHTTPRequest对象的说明DEMO</title> <script language=&qu ...
- [PHP] Eclipse开发PHP环境配置
首先准备好软件: 1. Apache,到这里找个最新版本 2. PHP,到这里下载 3. Eclipse IDE for Java EE Developers,到这里下载 4. DLTK Core F ...
- ORM之PetaPoco错误--VS中NUGet程序包管理安装PetaPoco
一般在Vs中使用PetaPoco的时候都是使用NuGet程序包管理来安装PetaPoco的,如果你在安装PetaPoco前设置了ConnectionString,那么PetaPoco中的T4模板会自动 ...