简述Linux容器和lxc

一、linux容器

Linux 容器 (LXC - linux container)

  • LXC 是非常轻量级的, 它将 VM 的进程也伪装成 HOST 的进程. 与提供硬件虚拟化机制的虚拟机不同,容器通过对“用户空间”的抽象化处理提供操作系统层级的虚拟化机制。通过对容器进行分解,大家将可以非常清晰地理解其中含义。
  • 出于各种考量与需求,容器在外观上与虚拟机非常相似。举例来说,二者皆拥有专有处理空间、能够作为root执行命令、提供专有网络接口与IP地址、允许定制化路由及iptable规则,且可启动文件系统等等。
  • 容器与虚拟机间的最大区别在于,各容器系统共享主机系统的内核


    容器和虚拟机结构区别

2、Linux 容器相关的2个重要概念

  • Linux容器功能是基于 cgroups 和 Namespace 来实现的. 所以要了解 Linux 容器必须先了解 cgroup 和 Namespace.
cgroups(控制组)
  • cgroups 是将任意进程进行分组化管理的 Linux 内核功能.通过cgroups可以有效的隔离各类进程, 同时还可以控制进程的资源占用(CPU, 内存等等)情况.
Namespace (命名空间)
  • 使用Namespace, 可以让每个进程组有独立的PID, IPC和网络空间.
    Namespace的生效主要是通过 clone系统调用来实现的.
    clone系统调用的第3个参数flags就是通过设置Namespace来划分资源的.

二、lxc概述

image.png
  • LXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C++中的NameSpace。容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。与传统虚拟化技术相比,它的优势在于:
    • (1)与宿主机使用同一个内核,性能损耗小;
    • (2)不需要指令级模拟;
    • (3)不需要即时(Just-in-time)编译;
    • (4)容器可以在CPU核心的本地运行指令,不需要任何专门的解释机制;
    • (5)避免了准虚拟化和系统调用替换中的复杂性;
    • (6)轻量级隔离,在隔离的同时还提供共享机制,以实现容器与宿主机的资源共享。
  • Linux Container提供了在单一可控主机节点上支持多个相互隔离的server container同时执行的机制。Linux Container有点像chroot,提供了一个拥有自己进程和网络空间的虚拟环境,但又有别于虚拟机,因为lxc是一种操作系统层次上的资源的虚拟化。

三、lxc的简单应用

1、安装

[root@node-64 ~]# yum install epel-release -y
[root@node-64 ~]# yum install lxc lxc-templates -y

2、简单使用

  • lxc-checkconfig:检查系统环境是否满足容器使用要求;
[root@node-64 ~]# lxc-checkconfig
Kernel configuration not found at /proc/config.gz; searching...
Kernel configuration found at /boot/config-3.10.0-693.el7.x86_64
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
newuidmap is not installed
newgidmap is not installed
Network namespace: enabled
Multiple /dev/pts instances: enabled

--- Control groups ---
Cgroup: enabled
Cgroup clone_children flag: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled

--- Misc ---
Veth pair device: enabled
Macvlan: enabled
Vlan: enabled
Bridges: enabled
Advanced netfilter: enabled
CONFIG_NF_NAT_IPV4: enabled
CONFIG_NF_NAT_IPV6: enabled
CONFIG_IP_NF_TARGET_MASQUERADE: enabled
CONFIG_IP6_NF_TARGET_MASQUERADE: enabled
CONFIG_NETFILTER_XT_TARGET_CHECKSUM: enabled

--- Checkpoint/Restore ---
checkpoint restore: enabled
CONFIG_FHANDLE: enabled
CONFIG_EVENTFD: enabled
CONFIG_EPOLL: enabled
CONFIG_UNIX_DIAG: enabled
CONFIG_INET_DIAG: enabled
CONFIG_PACKET_DIAG: enabled
CONFIG_NETLINK_DIAG: enabled
File capabilities: enabled

Note : Before booting a new kernel, you can check its configur
usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig   #也可以指明配置文件路径

lxc-create:创建lxc容器;

格式:lxc-create -n NAME -t TEMPLATE_NAME
lxc-start:启动容器;
lxc-start -n NAME -d
lxc-info:查看容器相关的信息;
lxc-info -n NAME
lxc-console:附加至指定容器的控制台;
lxc-console -n NAME -t NUMBER
lxc-stop:停止容器;
lxc-destory:删除处于停机状态的容器;
lxc-snapshot:创建和恢复快照;

lxc自带了很多模板,可以修改对应模板中的配置

[root@node-64 ~]# ls /usr/share/lxc/templates/
lxc-alpine     lxc-busybox  lxc-debian    lxc-gentoo        lxc-oracle  lxc-ubuntu
lxc-altlinux   lxc-centos   lxc-download  lxc-openmandriva  lxc-plamo   lxc-ubuntu-cloud
lxc-archlinux  lxc-cirros   lxc-fedora    lxc-opensuse      lxc-sshd

有需要可修改对应模板中仓库url,这里使用默认即可

[base]
name=CentOS-$release - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$release&arch=$basearch&repo=os
baseurl=https:// xxxxxx #修改仓库路径

创建容器

[root@node-64 templates]# lxc-create --name c1 -t centos

#容器创建后会自动生成一个秘码,可以使用下面命令修改秘码
[root@node-64 templates]# chroot /var/lib/lxc/c1/rootfs passwd

#查询容器信息
[root@node-64 templates]# lxc-info --name c1

给新创建的容器创建网络,首先创建网桥

#安装网桥工具
[root@node-64 ~]# yum install bridge-utils -y
#添加virbr0网桥
[root@node-64 ~]# brctl addbr virbr0
# 启动virbr0网桥
[root@node-64 ~]# ip link set dev virbr0 up
#给网桥添加地址
[root@node-64 ~]# ip addr add 10.0.0.254/24 dev virbr0
[root@node-64 ~]# ip addr l
...........
3: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether fe:36:d4:87:44:87 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.254/24 scope global virbr0
       valid_lft forever preferred_lft forever
    inet6 fe80::8849:9bff:fe03:38ab/64 scope link 
       valid_lft forever preferred_lft forever

#打开核心转发
[root@node-64 ~]# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
[root@node-64 ~]# iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE


启动容器

[root@node-64 ~]# lxc-start --name c1
CentOS Linux 7 (Core)
Kernel 3.10.0-693.el7.x86_64 on an x86_64

c1 login: root
Password:输入密码登录容器

给容器配置网络

#添加ip地址
[root@c1 ~]# ip addr add 10.0.0.1/24 dev eth0
[root@c1 ~]# ip a l
........
4: eth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether fe:64:24:53:c6:53 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.0.0.1/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::fc64:24ff:fe53:c653/64 scope link 
       valid_lft forever preferred_lft forever

#添加路由
[root@c1 ~]# ip route add 0.0.0.0/0.0.0.0 via 10.0.0.254
[root@c1 ~]# ip route l
default via 10.0.0.254 dev eth0 
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.1 

#测试ping虚拟网桥
[root@c1 ~]# ping 10.0.0.254
#测试ping宿主机
[root@c1 ~]# ping 192.168.1.64
#测试ping外网
[root@c1 ~]# ping www.baidu.com

查询容器运行情况

[root@node-64 ~]# lxc-top
Container            CPU      CPU      CPU      BlkIO        Mem
Name                Used      Sys     User      Total       Used
c1                  0.13     0.08     0.03  784.00 KB    1.51 MB
TOTAL (1 )          0.13     0.08     0.03  784.00 KB    1.51 MB

四、lxc的图形管理界面

安装图形管理界面
#安装依赖
[root@node-64 ~]# yum install python-flask  git -y

#克隆下载
[root@node-64 ~]# git clone https://github.com/lxc-webpanel/LXC-Web-Panel.git

#启动
[root@node-64 ~]# ls
anaconda-ks.cfg  LXC-Web-Panel
[root@node-64 ~]# cd LXC-Web-Panel/
[root@node-64 LXC-Web-Panel]# python lwp.py
 * Running on http://0.0.0.0:5000/  #启动端口

LXC Web登录

LXC Web管理页面

参考链接:https://www.cnblogs.com/wang_yb/p/3923040.html
https://baike.baidu.com/item/lxc/6014808

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • 一、Docker 简介 Docker 两个主要部件:Docker: 开源的容器虚拟化平台Docker Hub: 用...
    R_X阅读 4,343评论 0 27
  • Docker容器技术已经发展了好些年,在很多项目都有应用,线上运行也很稳定。整理了部分Docker的学习笔记以及新...
    __七把刀__阅读 11,330评论 0 59
  • 我喜欢将飞行时的两三个小时用来读读书。在一个相对远离了地心引力的高空中,读上两三篇散文,那一段时间里,什么都不用想...
    李杨手记阅读 461评论 3 1
  • 情不知所起,一往而情深。前段时间朋友圈里都在晒电影——我的前任3。 看过的人,据说都哭的撕心裂肺。我亲眼目睹了我的...
    芳华似水阅读 559评论 0 1
  • 王菲在《幻乐之城》的综艺首秀,想必给很多人带去了惊喜,无不惊叹《重庆森林》里古怪精灵、心思剔透的阿菲又回来了。 蓬...
    弛雪由疆阅读 6,645评论 0 2