简述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:  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:  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

你可能感兴趣的:(简述Linux容器和lxc)