LXC容器

1.    LXC简述

Linux container是一种资源隔离机制而非虚拟化技术。VMM(VMM Virtual Machine Monitor)或者叫Hypervisor是标准的虚拟化技术,这种技术通过虚拟层(也就是VMM或叫Hypervisor),主要作用一是让多个操作系统和应用共享硬件资源, 其二是把上层虚拟机的指令转换成底层Host操作系统所认识的指令,这就意味着在Linux上可以跑windows系统,container技术介于chroot和VM之间,其“虚拟机”和主机操作系统相同或很类似,即Linux下均是Linux架构的,没有安装windows虚拟机的。cgroup就是一个资源限制器,没有提供隔离功能,真正的隔离功能内核使用namespace实现的,这就意味着cgroup资源限制的模块间影响比container要大很多。

官方给出的LXC未来的目标是:

The goal of LXC is to create an environment as close as possible as a standard Linux installation but without the need for a separate kernel.

1.1  LXC与docker的关系

LXC将Linux进程沙盒化,使得进程之间相互隔离,并且能够控制各进程的资源分配。lxc 用容器的方式仿真了一个类似虚拟机的操作体验,并避免了虚拟机额外的系统负载。lxc利用cgroup和namespace在linux应用层创建了一个“虚拟机”(隔离的裸露文件系统),无法有效支持跨主机之间的容器迁移、管理复杂(lxd解决了这些问题)。lxc和docker不同地方在于lxc包含完整的操作系统,是一个系统容器。

Docker的底层使用了LXC来实现的,但docker对lxc封装,提供了更好的操作性和移植性。Docker容器将应用和其依赖环境全部打包到一个单一对象中,在不包含完整的操作系统的情况下就能运行普通应用,更加轻量级,可移植性更好。所以它成为了PaaS(比如Kubernates)平台的基石。

除了lxc底层基础之外,Docker还提供了一个具有以下强大功能的高级工具:

跨机器的便携式部署。 Docker定义了一种将应用程序及其所有依赖绑定到一个单独对象中的格式,该对象可以被传输到任何启用docker的机器上,并在那里执行,保证暴露给应用程序的执行环境是相同的。 Lxc实现了流程沙盒,这是便携式部署的重要先决条件,但单靠这一点对于便携式部署来说是不够的。如果您向我发送了一个安装在自定义lxc配置中的应用程序的副本,那么它几乎肯定不会像我们的机器那样在您的机器上运行,因为它与您计算机的特定配置有关:网络,存储,日志记录,发行版,等等。Docker为这些特定于机器的设置定义了一个抽象,以便完全相同的docker容器可以在许多不同的机器上运行,即使不同主机具有许多不同的配置。

以应用为中心。 Docker针对应用程序的部署进行了优化,而不是机器。这反映在其API,用户界面,设计理念和文档。相比之下,lxc助手脚本将容器作为轻量级的机器 - 基本上是启动速度更快,内存更少的服务器。我们认为容器不止于此。

自动构建。 Docker包含一个工具,供开发人员自动从源代码中组装一个容器,完全控制应用程序的依赖关系,构建工具,打包等。他们可以自由使用make,maven,chef,puppet,salt,debian包,rpms,source tarballs,或上述的任何组合,而不管机器的配置如何。

版本追溯。Docker包括用于跟踪容器的连续版本,检查版本之间的差异,提交新版本,回滚等类似git的功能。历史记录还包括如何组装一个容器以及由谁来完成,因此您可以从生产服务器一路回到上游开发商。 Docker也实现增量上传和下载,类似于“git pull”,所以新版本的容器只能通过发送差异来传输。

组件重用。任何容器都可以用作“基础图像”来创建更专业的组件。这可以手动完成或作为自动构建的一部分。例如,您可以准备理想的python环境,并将其用作10个不同应用程序的基础。您理想的postgresql设置可以重新用于您所有的未来项目。

共享。 Docker可以访问一个公共注册表(http://index.docker.io),成千上万的用户上传了有用的容器:从redis,couchdb,postgres到irc保险箱到rails应用服务器,以便为各种发行版本创建基础映像。登记处还包括由码头工作组维护的有用容器的官方“标准库”。注册表本身是开源的,所以任何人都可以部署他们自己的注册表来存储和传输私有容器,例如用于内部服务器部署。

工具生态系统。Docker定义了一个用于自动化和自定义容器的创建和部署的API。有大量的工具与docker集成来扩展其功能。 (Dokku,Deis,Flynn),多节点编排(maestro,salt,mesos,openstack nova),管理仪表板(docker-ui,OpenStack Horizo??n,造船厂),配置管理(厨师,puppet),持续集成(jenkins,strider,travis)等。Docker正在迅速将自己定位为基于容器的工具的标准。

2. 常用命令

2.1 常用操作命令

LXC可以创建两种不同的容器:

  • · 特权模式--以root身份运行各种lxc命令,创建特权容器;
  • · 普通模式--以普通用户身份运行各种lxc命令,创建非特权容器

普通容器又很多限制(比如无法创建设备节点),不过也更安全(不会危害到主机),因为这种容器的root用户,其实映射到主机上的一个普通用户。

1. lxc-checkconfig:检查系统环境是否满足容器使用要求。

2. lxc-create:创建lxc容器;

lxc-create -n NAME -t TEMPLATE_NAME

3. lxc-start:启动容器;

lxc-start -n foo [-f config] /bin/bash

lxc-start -n NAME -d

-d守护进程方式启动容器。如果没有指定命令,lxc-start将运行/sbin/init。

lxc-create创建的容器,在停止运行后需要使用lxc-destroy销毁。

4. lxc-execute:执行命令

lxc-execute -n foo [-f config] /bin/bash

lxc-execute通过中间进程lxc-init使命令在容器中运行。

如果容器不存在,lxc-execute会自动创建一个,停止运行后会被自动销毁。

lxc-execute启动应用程序,配置优先级如下:

如果执行-f选项,那么之前创建容器的配置文件不会被使用。如果指定-s选项,则在命令行中配置的键值对会覆盖配置文件(无论之前的还是-f指定的)的相同配置。

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

lxc-stop -n NAME -d

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

lxc-destroy -n NAME

7. lxc-info:查看容器相关的信息;

lxc-info -n NAME

8. lxc-ls:列出容器

lxc-ls --fancy 列出详细信息

9. lxc-monitor:监控容器

lxc-monitor -n "foo|bar"

lxc-monitor -n ".*"   ;监控所有容器

当一个容器的状态变化时,lxc-monitor会在屏幕上打印出容器的状态。

10. lxc-wait:监听容器特定状态后退出

lxc-wait -n foo -s STOPPED &

11. lxc-cgroup:设置或获取与cgroup相关的参数(control group subsystem)

lxc-cgroup -n foo cpuset.cpus

lxc-cgroup -n foo cpu.shares 512

11. lxc-snapshot:创建和恢复快照;

2.2 进入容器

进入容器的方式有三种:lxc-attach、lxc-console、和SSH.

1. lxc-attach

lxc-attach -n Name

lxc-attach -n Name -- command

提升特权,并指定名字空间,在测试主机上软件时很有用:

lxc-attach -n ubuntu1 -e -s ‘NETWORK|UTSNAME‘

2. lxc-console

lxc-console -n Name 登录容器,需要用户名和密码

3. ssh

ssh 用户名@IP

2.3 克隆容器

"克隆"要么是其他容器的一份拷贝,要么是其他容器的一份快照。

拷贝:完整的复制原来的容器,所占的空间和原来的容器一样大

快照:利用后台文件系统的快照功能,创建一个很小的新容器,在发生写操作时才进行复制

要想使快照拥有这个写时复制的特性,需要一个特殊存储系统,支持快照的存储方式有:aufs,btrfs,LVM,overlayfs,zfs等,每种存储方式各有自己特点。

lxc-clone用于创建拷贝和快照,在创建之前需要停止容器:

sudo lxc-stop -n Name

sudo lxc-copy -n Name -N clone_Name    ;拷贝

sudo lxc-copy -s -n Name -N snapshot_Name   ;快照

sudo lxc-snapshot -n Name { -r snapshot_Name -N nawName;创建快照或恢复

创建的快照位于/var/lib/lxc/容器名目录下,快照名字为snap0,snap1…

3. 安装

1. 安装lxc 和lxc 自带的模板包

sudo add-apt-repository ppa:ubuntu-lxc/lxc-stable

sudo apt-get update

sudo apt install lxc lxc-templates

2. 添加网桥

lxc不会处理容器网络,需要配置网络(在Ubuntu下通过apt安装的话,网桥已经配置好)。

sudo apt install bridge-utils -y

brctl addbr virbr0  #添加网桥

brctl addif virbr0 ens33 ; # 将网桥关联到ens33这个网卡 \

ip addr del dev ens33 192.168.253.128/24 ; #把网卡上的ip删了 \

ifconfig  virbr0 192.168.253.128/24 up  #给网桥配置ip \

route add default gw 192.168.253.2 #设置默认网关

4.  LXC模板

所谓的模板就是一个原型,依据该原型可以创建一系列类似的LXC虚拟机,如果使用lxc自带的模板,那么该原型只提供最基本的配置,如果想使用vim,gcc,mysql需要自己制作。这里所说的模板制作,只是一个比较简单的最基础的制作,有点类似嵌入式系统的最小系统的概念,只保留最最基本的应用,在这基础之上,添加相应的应用。

模板就是创建容器的脚本,包含容器中各种源(或组件)地址及下载和一步步制作容器的方法,本质就是shell脚本。

创建ubuntu容器后,容器文件系统目录如下:

创建Ubuntu的lxc容器日志,生成时间超过30min(主要是源下载时间长)。

参考:

1. https://linuxcontainers.org/ 官网

2. Docker系列02—LXC---Docker的“前身”

3. LXC简单介绍与使用

4. LXC之三--创建模板

5. 最佳虚拟容器LXC

6. docker到底比LXC多了些什么

原文地址:https://www.cnblogs.com/embedded-linux/p/11785529.html

时间: 2024-10-11 07:30:48

LXC容器的相关文章

Linux Container(LXC)容器隔离实现机制

一.LXC概述 LXC(LinuxContainer)是来自于Sourceforge网站上的开源项目,LXC给Linux用户提供了用户空间的工具集,用户可以通过LXC创建和管理容器,在容器中创建运行操作系统就可以有效的隔离多个操作系统,实现操作系统级的虚拟化.最初的Docker容器技术基于LXC进行构建,后来Docker在自己的内核中刨除了LXC. 二.LXC命令介绍 从Linux内核2.6.27版本开始已经支持LXC,只需要在Linux用户态安装相应的用户态工具liblxc即可.下表3-1是L

LXC容器运行X Server(续1)

容器要运行X桌面环境可通过ssh,xdmcp远程方式,此时容器是X Client,容器是无需安装X Server.上篇( https://blog.51cto.com/13752418/2440496 )容器中以本地方式运行X是在宿主的虚拟终端(如vt09)上运行容器X.本文是续篇,同样容器中以本地方式运行X Server,介绍的内容是容器运行X在宿主的桌面窗口之上,容器以本地方式登录桌面环境,即界面上类似VirtualBox的方式. 实验环境 : debian 11 主机名 shell提示符

在Ubuntu16.04上部署LXC容器管理系统的相关步骤

打算安装一个LXC linux容器管理的软件来分配使用资源并配置不同的编程环境,这样就方便大家的使用,步骤如下(宿主机的环境都搭建好了,对应显卡的驱动等): 参考网站: 简单入门和相关指令总结:https://www.ibm.com/developerworks/cn/linux/1312_caojh_linuxlxc/index.html Linux 容器的资源管理方法:https://www.ibm.com/developerworks/cn/linux/1404_caojh_lxc/ 其他

容器虚拟化lxc

一.简介 LXC为Linux Container的简写.Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性.相当于C++中的NameSpace.容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求.与传统虚拟化技术相比,它的优势在于 (1)与宿主机使用同一个内核,性能损耗小: (2)不需要指令级模拟: (3)不需要即时(Just-in-time)编译

ubuntu 14.04 体验LXC非特权容器

LXC 1.0 最大的特性是非特权容器,通过巧妙的uidmap,将物理机的普通用户(uid和gid)映射成容器里的root(uid=0,gid=0),极大的提高了lxc的安全性. LXC 1.0 对内核和python版本有要求,故下文以 ubuntu 14.04 为例,使用普通用户dell创建非特权的lxc容器. (以下操作,非特别说明,均为root权限操作,命令提示符为#号) 1.安装lxc apt-get install lxc uidmap 2.创建普通用户 useradd -m dell

使用lxc提供轻量级虚拟化

lxc(linux containers)是一种基于容器的操作系统层级的虚拟化技术,一个容器就是一个虚拟的执行环境,容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求. 一.如何实现lxc lxc在资源管理方面依赖于linux内核的cgroups(control groups)子系统,cgroups子系统是linux内核提供的一种可以限制.记录.隔离进程组(process groups)所使用的物理资源(如:CPU, Memory, IO等)的框

Docker容器简用

一.安装 ①RedHat/CentOS下的docker安装 RedHat/CentOS必须要6.6版本以上,或者7.x才能安装docker,建议在RedHat/CentOS 7上使用docker,因为RedHat/CentOS 7的内核升级到了kernel 3.10,对lxc容器支持更好. # yum -y install docker # systemctl start docker ②Ubuntu下docker安装 # sudo apt-get install docker.io # ser

LXC(Linux Containers)安装及使用

下面的步骤均在Ubuntu 12.04上执行. 安装 想在Ubuntu上使用LXC,就要安装LXC用户空间工具,如下所示. $ sudo apt-get install lxc 安装完毕之后,运行lxc-checkconifg工具,检查当前Linux内核支持LXC的情况.要是一切都已被启用,内核对LXC的支持已准备就绪. $ lxc-checkconfig 安装LXC工具后,你会发现,LXC的默认网桥接口(lxcbr0)已自动创建(已在/etc/lxc/default.conf中加以配置). 创

LXC(Linux Containers)简介

1.LXC是什么? LXC是Linux containers的简称,是一种基于容器的操作系统层级的虚拟化技术. 2.LXC可以做什么? LXC可以在操作系统层次上为进程提供的虚拟的执行环境,一个虚拟的执行环境就是一个容器.可以为容器绑定特定的cpu和memory节点,分配特定比例的cpu时间.IO时间,限制可以使用的内存大小(包括内存和是swap空间),提供device访问控制,提供独立的namespace(网络.pid.ipc.mnt.uts). 3.LXC如何实现? Sourceforge上