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

网友投稿 2006 2022-11-17

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

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

1.LXC是什么?

LXC是Linux containers的简称,是一种基于容器的操作系统层级的虚拟化技术。2.LXC可以做什么?LXC可以在操作系统层次上为进程提供的虚拟的执行环境,一个虚拟的执行环境就是一个容器。可以为容器绑定特定的cpu和memory节点,分配特 定比例的cpu时间、IO时间,限制可以使用的内存大小(包括内存和是swap空间),提供device访问控制,提供独立的namespace(网络、 pid、ipc、mnt、uts)。3.LXC如何实现?Sourceforge上有LXC这个开源项目,但是LXC项目本身只是一个为用户提供一个用户空间的工具集,用来使用和管理LXC容器。LXC真 正的实现则是靠Linux内核的相关特性,LXC项目只是对此做了整合。基于容器的虚拟化技术起源于所谓的资源容器和安全容器。LXC在资源管理方面依赖与Linux内核的cgroups子系统,cgroups子系统是Linux内核提供的一个基于进程组的资源管理的框架, 可以为特定的进程组限定可以使用的资源。LXC在隔离控制方面依赖于Linux内核的namespace特性,具体而言就是在clone时加入相应的 flag(NEWNS NEWPID等等)。4.为什么要选择LXC?LXC是所谓的操作系统层次的虚拟化技术,与传统的HAL(硬件抽象层)层次的虚拟化技术相比有以下优势:更小的虚拟化开销(LXC的诸多特性基本由内核特供,而内核实现这些特性只有极少的花费,具体分析有时间再说)快速部署。利用LXC来隔离特定应用,只需要安装LXC,即可使用LXC相关命令来创建并启动容器来为应用提供虚拟执行环境。传统的虚拟化技术则需要先创建虚拟机,然后安装系统,再部署应用。LXC跟其他操作系统层次的虚拟化技术相比,最大的优势在于LXC被整合进内核,不用单独为内核打补丁。5.如何使用LXC? lxc常见命令使用:lxc-version 用于显示系统LXC的版本号(可以通过此命令判断系统是否安装了lxc)用法:lxc-version例如:lxc-versionlxc-checkconfig 用于判断linux内核是否支持LXC用法:lxc-checkconfig例如:lxc-checkconfiglxc-create用于创建一个容器用法:lxc-create -n name [-f config_file]-n 后面跟要创建的容器名字 例如:-n foo-f 后面跟容器配置文件的路径注:1.采用lxc-create创建的容器,在停止运行后,不会被销毁,要采用lxc-destroy命令才能销毁2.容器命令空间是全局的,系统中不允许存在重名的容器,如果-n 后面跟一个已经存在的容器名,创建会失败例如:lxc-create --n foo --f foo.conflxc-execute 用于在一个容器执行应用程序用法: lxc-execute -n name [-f config_file] [ -s KEY=VAL ]command-n 后面跟容器名字(容器名字用于管理容器)例如:-n foo-f 后面跟容器配置文件的路径(如果没有配置文件,可以直接用-s指定配置选项,如果什么都没有,系统采用默认策略)例如:-f foo.conf-s 后面跟配置键值对 例如:lxc.cgroup.cpu.shares=512command 为要执行的命令 例如:/bin/bash这个命令会mount /proc 并且会自动创建/销毁容器。注:1.如果容器还不存在,lxc-execute会自动创建一个,容器停止运行后会被自动销毁2.用lxc-execute启动应用程序,配置优先级如下:如果指定-f选项,那么之前创建容器(如果容器是已存在的)的配置文件不会被使用如果指定-s选项,则在命令行中的配置键值对会覆盖配置文件(无论之前的还是-f指定的)相同配置例如:lxc-execute --n foo --s lxc.cgroup.cpu.shares=512 /bin/bash使用实际例子:lxc-execute -n test /bin/bash这个会启动一个lxc并给出类似的一个cmd窗口,网络是与操作系统共用的,这里好像仅仅是创建了一个命名空间如果没有指定-f,默认的隔离将被使用,这个命令当你需要一个快速在一个 隔离的环境中运行程序。在物理机上和container中都会运行lxc-init,在宿主机上面,这个程序用于转发lxc-kill 信号到已经启动的程序中 ,在container中,这个程序的pid为1,它会fork出要执行的命令(pid为2)并执行。lxc-start 用于在容器中执行给定命令用法:lxc-start -n name [-f config_file] [-c console_file] [-d] [-s KEY=VAL][command]-d 将容器当做守护进程执行-f 后面跟配置文件-c 指定一个文件作为容器console的输出,如果不指定,将输出到终端-s 指定配置如果没有指定命令,lxc-start 将要运行 /sbin/init例如:lxc-start -n foo -f foo.conf -d /bin/bash注:1.如果容器还不存在,lxc-start会自动创建一个,容器停止运行后会被自动销毁2.lxc-start配置优先级与lxc-execute相同3.lxc-start 与lxc.execute的异同:lxc-start 和 lxc-execute都可以在容器中启动进程,区别在于lxc-start直接创建进程,lxc-execute先创建lxc-init进程,然后在 lxc-init中fork一个进程来执行。(关于第4点,lxc-init所占的是一个什么样的地位?)The orphan process group and daemon are not supported by this command,use the lxc-execute command insteadIf no command is specified, lxc-start will use the default "/sbin/init"command to run a system container.4.lxc-start用于在容器启动system,lxc-execute用于在容器执行应用程序lxc-kill 发送信号给容器中的第一个用户进程(容器内部进程号为2的进程)用法:lxc-kil -n name SIGNUM-n 后面跟容器名SIGNUM 信号 (此参数可选,默认SIGKILL)例如:lxc-kill -n foolxc-stop 用于停止容器中所有的进程用法:lxc-stop -n name-n后面跟要停止的容器名例如:lxc-stop --n foolxc-destroy 用于销毁容器用法:lxc-destroy -n name-n后面跟要停止的容器名例如: lxc-destroy --n foolxc-cgroup 用于获取或调整与cgroup相关的参数用法:lxc-cgroup -n name subsystem value-n 后面跟要调整的容器名例如: lxc-cgroup -n foo devices.listlxc-cgroup -n foo cpuset.cpus "0,3"lxc-info 用户获取一个容器的状态用法:lxc-info -n name-n后面跟操作的容器名例如: lxc-info --n foo注:容器的状态有:STARTING RUNNING STOPPING STOPPED ABORTINGlxc-monitor 监控一个容器状态的变换,当一个容器的状态变化时,此命令会在屏幕上打印出容器的状态用法:lxc-monitor -n name例如:lxc-monitor -n foolxc-ls 列出当前系统所有的容器用法:lxc-ls例如:lxc-lslxc-ps 列出特定容器中运行的进程用法:lxc-ps例如:lxc-ps -n foo更多的命令介绍可以再man page获得

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:基于Jpa中ManyToMany和OneToMany的双向控制
下一篇:【力扣·每日一题】429. N 叉树的层序遍历(C++ bfs)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~