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介绍的更多相关文章

  1. 虚拟化–操作系统级 LXC Linux Containers内核轻量级虚拟化技术

    友情提示:非原文链接可能会影响您的阅读体验,欢迎查看原文.(http://blog.geekcome.com) 原文地址:http://blog.geekcome.com/archives/288 软 ...

  2. LXC linux容器简介——在操作系统层次上为进程提供的虚拟的执行环境,限制其使用的CPU和mem等资源,底层是linux内核资源管理的cgroups子系统

    1.LXC是什么? LXC是Linux containers的简称,是一种基于容器的操作系统层级的虚拟化技术. 2.LXC可以做什么? LXC可以在操作系统层次上为进程提供的虚拟的执行环境,一个虚拟的 ...

  3. LXC(LinuX Container)之namespaec和cgroup

    LXC(LinuX Container)之namespaec和cgroup namespace概述 从操作系统级上实现了资源的隔离,它本质上是宿主机上的进程(容器进程),所以资源隔离主要就是指进程资源 ...

  4. 2.LXC和namespace介绍

    lxc介绍 LXC又名Linux container,是一种虚拟化的解决方案,这种是内核级的虚拟化.(主流的解决方案Xen ,KVM, LXC) Linux Container容器是一种内核虚拟化技术 ...

  5. 01 Linux入门介绍

    一.Linux 初步介绍 Linux的优点 免费的,开源的 支持多线程,多用户 安全性好 对内存和文件管理优越 系统稳定 消耗资源少 Linux的缺点 操作相对困难 一些专业软件以及游戏支持度不足 L ...

  6. Linux Epoll介绍和程序实例

    Linux Epoll介绍和程序实例 1. Epoll是何方神圣? Epoll但是当前在Linux下开发大规模并发网络程序的热门人选,Epoll 在Linux2.6内核中正式引入,和select类似, ...

  7. Linux入门介绍

    Linux入门介绍 一.Linux 初步介绍 Linux的优点 免费的,开源的 支持多线程,多用户 安全性好 对内存和文件管理优越 系统稳定 消耗资源少 Linux的缺点 操作相对困难 一些专业软件以 ...

  8. Linux 系统目录介绍

    bin : bin 是Binary 二进制的缩写,就是可执行文件了.Bin目录下是用户常用的命令. sbin: 此目录下也是二进制文件 ,不过这里的命令是 超级用户如 root 这样的用户使用的. e ...

  9. Linux命令介绍

    资料链接:(Linux基本命令介绍)http://note.youdao.com/share/?id=36c07917f8d3e6437c1e764c3516a3f2&type=note#/ ...

随机推荐

  1. C# 图片保存到数据库和从数据库读取图片并显示

    图片保存到数据库的方法: public void imgToDB(string sql)        {   //参数sql中要求保存的imge变量名称为@images            //调 ...

  2. mac 环境下mysql 不能删除schema问题的解决办法

    首先说明下问题环境,我是在mac机器上安装的mysql+workbench. 在删除一个数据库的时候,出现error dropping database cant rmdir ./test 的问题. ...

  3. [AngularJS] Provider

    This lesson describes what is really happening when you use the angularfactory and how you can make ...

  4. INNOBACKUPEX热备MYSQL数据

    http://www.databaseclub.com/2014/11/innobackupex/ 1)对MySQL进行全备份1.备份数据   1 innobackupex --user=userna ...

  5. 百度地图 web定位

    <!DOCTYPE html><html><head><meta charset="utf-8" /><meta name=& ...

  6. c语言中的unsigned 和 signed

    我们来一起看下,C语言中,对于Integer Type(整数形式)的unsigned与signed两种形式的区别,以及在内存中的存储方式是如何的 Integer type(整数形式)是C语言中的基本数 ...

  7. Session fixation--wiki

    http://en.wikipedia.org/wiki/Session_fixation In computer network security, session fixation attacks ...

  8. C#轻型ORM框架PetaPoco试水

    近端时间从推酷app上了解到C#轻微型的ORM框架--PetaPoco.从github Dapper 开源项目可以看到PetaPoco排第四 以下是网友根据官方介绍翻译,这里贴出来. PetaPoco ...

  9. E - Trees on the level

     Trees on the level  Background Trees are fundamental in many branches of computer science. Current ...

  10. 模拟游客一天的生活与旅游java程序代写源码

    在某个城市的商业区里,有一家首饰店,一家饭店,一家面馆,一家火锅店,一家银行,一家当铺 现在有一群来自四川的游客,一群陕西的游客,一群上海的游客,和以上各店家的工作人员在此区域里,请模拟他们一天的生活 ...