1 概述

本段概述出自百度百科:https://baike.baidu.com/item/lxc/6014808

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

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

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

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

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

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

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

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

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

本文将主要介绍lxc的相关命令使用介绍

安装

注意,lxc的相关包在epel源里,要配置好epel源仓库

查看lxc相关包,命令如下

yum list all | grep -i lxc

主要安装lxc和lxc-templates这两个包,其中,lxc-templates实现快速分发和构建系统

命令如下

yum -y install lxc lxc-templates

使用lxc

相关命令如下

lxc-attach       lxc-config       lxc-freeze       lxc-stop         lxc-wait

lxc-autostart    lxc-console      lxc-info         lxc-top         

lxc-cgroup       lxc-create       lxc-monitor      lxc-unfreeze    

lxc-checkconfig  lxc-destroy      lxc-snapshot     lxc-unshare     

lxc-clone        lxc-execute      lxc-start        lxc-usernsexec 

命令lxc-checkconfig 查看当前lxc的环境是否支持相关功能,显示enabled为支持

3  模板拷贝

lxc的模板文件,辅助安装某一目标操作系统的组件,本质上模本是一些脚本文件,执行手动配置的相关命令,设置一个容器,模板放在/usr/share/lxc/templates路径下

命令   lxc-create   通过制定模板进行创建容器

指定模板后,会通过互联网,通过对应配置,连接上对应的yum仓库,下载对应模板的对应的仓库的文件,安装相应模板系统。安装不指定根路径时,则默认根文件路径是/var/lib/lxc,要确保这个路径下有足够的空间可以安装

如果不想通过互联网的仓库进行安装,可以更改模板中的yum源为本地的yum源,主要更改baseurl,安装会更快,不用到互联网上安装,默认是安装一个最小化的包,

如下,更改lxc-centos模板中的yum源为本地光盘,禁用更新源

cp /usr/share/lxc/templates/lxc-centos /root/lxc-centos
vim /root/lxc-centos
[base]
name=local repository
baseurl="$repo"
EOF
    elif [ ${basearch} = 'i386' ] || [ ${basearch} = 'x86_64' ]; then
        cat <<EOF > $REPO_FILE
[base]
name=CentOS-$release - Base
mirrorlist=file:///cdrom/
 
[updates]
name=CentOS-$release - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$release&arch=$basearch&repo=updates
enabled=0
EOF
    else
        cat <<EOF > $REPO_FILE
[base]
name=CentOS-$release - Base
baseurl=http://mirror.centos.org/altarch/7/os/$basearch/
 
[updates]
name=CentOS-$release - Updates
baseurl=http://mirror.centos.org/altarch/7/updates/$basearch/
EOF
    fi

4  创建桥

虚拟机要使用自己的网络名称空间,其中包括网络,因此,在创建虚拟机前,要设定虚拟网络,这样容器能够加入虚拟网络,使得容器能够拥有自己的网络。要让虚拟机能够访问网络有两种方式,一种是把容器的网络暴露出去,一种是使用net桥,使得容器能够使用物理机的网络,即所谓的物理桥,创建容器是 默认是自动关联上ifcfg-virbr0这个网卡

创建虚拟网卡步骤如下

编辑两个网卡

编辑物理网卡,将物理网卡的地址信息曲调,同时添加BRIDAGE选项为virbr0

vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=f4944b1a-4b42-4bfe-a7de-9134c3623984
DEVICE=ens33
ONBOOT=yes
BRIDGE=virbr0

编辑虚拟网卡,保留网卡的物理ip地址信息,但是把网卡的name,device,type这几个选项进行更改,uuid要去掉

vim /etc/sysconfig/network-scripts/ifcfg-virbr0
TYPE=Bridge
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=virbr0
DEVICE=virbr0
ONBOOT=yes

修改完成后,重启网卡

systemctl restart network.service

5  生成虚拟机和相关命令

执行安装,会安装到/var/lib/lxc下,注意容器的名称是要唯一的,会生成一个密码,安装后可以更改

lxc-create 创建一个虚拟机centos7-mini,,模板文件为/root/lxc-centos,默认最小化安装

格式如下:

lxc-create -n NAME -t TEMPLATE_NAME

命令如下

 lxc-create -n centos7-mini -t /root/lxc-centos

安装后文件由安装时的临时缓存路径被移动到对应路径/var/lib/lxc下面,安装过程有如下命令

Copy /var/cache/lxc/centos/x86_64/7/rootfs to /var/lib/lxc/centos7-mini/rootfs ...
Copying rootfs to /var/lib/lxc/centos7-mini/rootfs ...

文件拷贝完成后,则完成安装

初始的根用户的密码保存在文件/var/lib/lxc/centos7-mini/tmp_root_pass里面

更改密码命令如下

chroot /var/lib/lxc/centos7-mini/rootfs passwd

查看容器状态和信息

 lxc-info --name centos7-mini

启动容器


 lxc-start  --name centos7-mini

lxc剥离退出终端用ctrl+a q退出,组合键可能不能用,因为可能是被crt工具占用了,默认启动容器后,sshd服务启动,因此可以被远程连接

停止容器

lxc-stop  --name centos7-mini

删除处于停机状态的容器

lxc-destroy   --name centos7-mini

创建和恢复快照

Lxc-snapshot

实现跨网络的简单实验,可以使用lxc来实现。每一个用户空间就是一个虚拟机

6  基于LXC-Web-Panel的页面管理

github上有同样的panel的项目,可以实现页面管理创建容器,可以实现启动,停止,创建容器,该项目基于python开发,要安装python-flask软件,注意,这里python需要python2.x

yum -y install lxc lxc-templates
yum -y install python-flask
yum -y install git

把项目从git上克隆到本地

 git clone https://github.com/lxc-webpanel/LXC-Web-Panel.git

移动到目录/usr/local下

mv LXC-Web-Panel/ /usr/local/
 cd /usr/local/LXC-Web-Panel
 python lwp.py

此时会打开的5000端口

访问 http://ip:5000 账号和密码为admin

http://10.10.10.73:5000/

可以直接创建,克隆容器,注意这里要创建的时候,对/var/lib/lxc下要有对应的权限