容器虚拟化lxc

一、简介

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

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

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

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

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

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

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

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

Linux Container提供了在单一可控主机节点上支持多个相互隔离的server container同时执行的机制。Linux Container有点像chroot,提供了一个拥有自己进程和网络空间的虚拟环境,但又有别于虚拟机,因为lxc是一种操作系统层次上的资源的虚拟化。

二、与传统虚拟化对比

不同于vmware,kvm等虚拟化技术,它是一种类似chroot的容器技术,非常的轻量级。

与传统的硬件虚拟化技术相比有以下优势:

a、更小的虚拟化开销。Linux内核本身是一个很好的硬件资源调度器,LXC的诸多特性基本由内核提供,而内核实现这些特性只有极少的花费,CPU,内存,硬盘都是直接使用。

b、更快的启动速度。lxc容器技术将操作系统抽象到了一个新的高度。直接从init启动,省去了硬件自检、grub引导、加载内核、加载驱动等传统启动项目,因此启动飞速。

c、更快速的部署。lxc与带cow特性的后端文件系统相结合,一旦建好了模板,利用快照功能,半秒钟即可实现克隆一台lxc虚拟机。LXC虚拟机本质上只是宿主机上的一个目录,这也为备份和迁移提供了极大便利。

d、更高内存使用效率。普通虚拟机一般会独占一段内存,即使闲置,其他虚拟机也无法使用,例如KVM。而容器可以只有一个内存上限,没有下限。如果它只使用1MB内存,那么它只占用宿主机1MB内存。宿主机可以将富余内存作为他用。

三、安装

3.1 解决依赖关系

# yum install libcgroup 
# service cgconfig start

# yum install libvirt	//在配置网桥的时候用到
# yum install rsync		//在安装OS的时候用于文件拷贝用到

3.2 提供虚拟网桥接口

在/etc/sysconfig/network-scripts目录中新建名为ifcfg-br0的配置文件,其内容如下:
# cd /etc/sysconfig/network-scripts/
# cp ifcfg-eth0 ifcfg-br0
# cat ifcfg-br0
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
DELAY=0
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.0.200
NETMASK=255.255.255.0
GATEWAY=192.168.0.1

# cat ifcfg-eth0 
DEVICE="eth0"
BOOTPROTO="static"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Ethernet"
BRIDGE=br0

上述步骤无误后重启network服务即可。另外,还有其它简单的方式来实现桥接设备的创建,例如使用brctl或virsh等,这里不再详述。

3.3 安装lxc

epel源中的lxc的版本为1.0.7

# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# sed -i ‘[email protected]^#@@‘ /etc/yum.repos.d/epel.repo
# sed -i ‘[email protected]@#[email protected]‘ /etc/yum.repos.d/epel.repo

# yum install lxc lxc-templates

3.4 检查lxc运行环境

# lxc-checkconfig

3.5 创建centos虚拟机

lxc为创建虚拟机提供了模板文件,它们位于/usr/share/lxc/templates目录中。其中的lxc-centos即为创建lxc centos系统的模板。

另外,lxc为虚拟机提供的默认配置文件为/etc/lxc/default.conf,其中使用的桥接接口名称为virbr0,此与前面的创建的接口名称不一致,因此需要作出修改。
当然,也可以将此文件复制之后进行修改,并以为作为接下来的要创建的centos虚拟机的专用配置文件。修改后的default.conf如下所示。

# cp /etc/lxc/{default.conf,default.conf.bak}
# cat /etc/lxc/default.conf
lxc.network.type = veth
lxc.network.link = br0
lxc.network.flags = up

创建虚拟机centos:
# lxc-create -n centos -t /usr/share/lxc/templates/lxc-centos 		//默认是网络方式安装,安装的速率取决你的网速
Host CPE ID from /etc/system-release-cpe: cpe:/o:centos:linux:6:GA
Checking cache download in /var/cache/lxc/centos/x86_64/6/rootfs ... 
…………
…………
Complete!
Download complete.
Copy /var/cache/lxc/centos/x86_64/6/rootfs to /var/lib/lxc/centos/rootfs ... 	//这里的Copy似乎就用的是rsync
Copying rootfs to /var/lib/lxc/centos/rootfs ...
Storing root password in ‘/var/lib/lxc/centos/tmp_root_pass‘					//root用户的密码文件
Expiring password for user root.
passwd: Success

Container rootfs and config have been created.
Edit the config file to check/enable networking setup.

The temporary root password is stored in:

        ‘/var/lib/lxc/centos/tmp_root_pass‘

The root password is set up as expired and will require it to be changed
at first login, which you should do as soon as possible.  If you lose the
root password or wish to change it without starting the container, you
can change it from the host by running the following command (which will
also reset the expired flag):

        chroot /var/lib/lxc/centos/rootfs passwd

上述输出内容表示系统安装已经成功,可由lxc-start命令启动了。另外,目标系统的root用户的默认密码在/var/lib/lxc/centos/tmp_root_pass文件中。

3.6 启动目标系统centos:

启动lxc虚拟机需要使用lxc-start命令。此命令的常用选项有

-n NAME:要启动的虚拟机的名称

-d: 在后台运行此虚拟机

-o /path/to/somefile: 日志文件的保存位置

-l: 日志级别

简单的启动命令如下所示:

# lxc-start -n centos

启动后可直接连接至目标系统的控制台,并在显示登录提示符后登录系统即可。需要注意的是,root用户的默认密码已经被设置为过期,因此第一次登录时需要修改密码后方可使用。

也可以在lxc-start的命令后面附加-d选项,让系统运行于后台。如果要停止虚拟机,使用lxc-stop命令即可。

四、通过本地安装OS

4.1、查看配置文件路径

# rpm -ql lxc-templates

4.2、修改CentOS的默认模板文件,修改前定要备份

# cp /usr/share/lxc/templates/{lxc-centos,lxc-centos.bak}
# cd /usr/share/lxc/templates/
# vim lxc-centos
修改如下行
[base]
name=local repository
baseurl=file:///mnt			//修改此处
EOF
else
	cat <<EOF > $REPO_FILE
[base]
name=CentOS-$release - Base
baseurl=file:///mnt			//修改此处

4.3、挂载光驱

# mount /dev/cdrom /mnt/

4.4、安装OS系统命令

# lxc-create -n centos02 -t /usr/share/lxc/templates/lxc-centos
or
# lxc-create -n centos03 -t centos

5、修改密码

# chroot /var/lib/lxc/centos02/rootfs passwd	//修改密码的第二种方式
Changing password for user root.
New password: 
BAD PASSWORD: it is based on a dictionary word
BAD PASSWORD: is too simple
Retype new password: 
passwd: all authentication tokens updated successfully.
时间: 2024-10-19 08:18:09

容器虚拟化lxc的相关文章

Linux容器虚拟化LXC的使用

Oops: 万一不能访问,请自带梯子和火星文翻译器 官方网站: https://linuxcontainers.org/ Github: https://github.com/lxc/lxc 火星文简介: What's LXC? LXC is a userspace interface for the Linux kernel containment features. Through a powerful API and simple tools, it lets Linux users ea

部署docker容器虚拟化平台

Dcoker概述 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app).几乎没有性能开销,可以很容易地在机器和数据中心中运行.最重要的是,他们不依赖于任何语言.框架或包装系统.   Docker是dotCloud公司开源的一个基于LXC的高级容器引擎,源代码托管在Github上, 基于go语言并遵从Apache2

Docker容器虚拟化技术

Docker是近十年软件工程领域最大的革命.Docker的技术可以完全存驻整个软件的开发.测试.部署和运维等软件生产的方方面面的环节. 提到Docker,也不得不提虚拟化,因为大家谈云计算的时候,也不得不提虚拟化技术.Docker所代表的虚拟化技术和我们以前谈的云计算的虚拟化技术怎么区别呢?以前我们谈云计算的虚拟化技术都是一些譬如Vmware或者是openstack,这些为代表的虚拟化技术都是比较重量级的虚拟化.以vmware举例,vmware大家都知道,他虚拟化的时候是将传统的一台计算机抽象成

容器虚拟化——docker 详解

本文主要是对 Docker 的以下内容进行详细介绍: 1.Docker简介 2.Docker安装 3.Docker镜像管理 4.Docker容器管理 5.Docker仓库管理 6.Docker数据管理 7.Docker网络管理 一.Dokcer简介 Docker 是一个开源项目, 诞生于2013年初, 最初是 dotCloud 公司后改名为 Docker lnc内部的一个业余项目. 它基于Google 公司推出的 Go 语言实现.项目后来加入了 Linux 基金会, 遵从了 Apache 2.0

Docker第四回(容器虚拟化网络)

一.docker网络简介 网络作为docker容器化实现的6个名称空间的其中之一,是必不可少的.其在Linux内核2.6时已经被加载进内核支持了.网络名称空间主要用于实现网络设备和协议栈的隔离,列如:一个docker host有4块网卡,在创建容器的时候,将其中一块网卡分配给该名称空间,那么其他名称空间是看不到这块网卡的.且:一个设备只能属于一个名称空间.因为一个名称空间绑定一个物理网卡和外界通信,且一个物理网卡不能分配多个名称空间,这使得我们只能创建4个名称空间.如果要创建的名称空间多于我们的

硬件虚拟化和容器虚拟化

原文地址:https://www.cnblogs.com/chenming-1998/p/11828861.html

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提示符

docker技术剖析--镜像、容器管理

防伪码:博观而约取,厚积而薄发                                 docker技术剖析--镜像.容器管理 一.Docker简介 Docker是什么? Docker的英文本意是"搬运工",在程序员的世界里,Docker搬运的是集装箱(Container),集装箱里装的是任意类型的App,开发者通过Docker可以将App变成一种标准化的.可移植的.自管理的组件,可以在任何主流系统中开发.调试和运行. 说白了,docker是一种用了新颖方式实现的轻量级虚拟机,

Docker入门实战-SSH连接docker容器

简介 什么是Docker Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护. Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc.Redhat 已经在其 RHEL6.5 中集中支持 Docker:Google 也在其 PaaS