美文网首页生信软件札记
简述Linux容器和lxc

简述Linux容器和lxc

作者: 任总 | 来源:发表于2018-12-31 23:49 被阅读12次

    一、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

    相关文章

      网友评论

        本文标题:简述Linux容器和lxc

        本文链接:https://www.haomeiwen.com/subject/yfsyhqtx.html