簡(jiǎn)述Linux容器和lxc

一、linux容器

Linux 容器 (LXC - linux container)

  • LXC 是非常輕量級(jí)的, 它將 VM 的進(jìn)程也偽裝成 HOST 的進(jìn)程. 與提供硬件虛擬化機(jī)制的虛擬機(jī)不同,容器通過(guò)對(duì)“用戶空間”的抽象化處理提供操作系統(tǒng)層級(jí)的虛擬化機(jī)制。通過(guò)對(duì)容器進(jìn)行分解,大家將可以非常清晰地理解其中含義。
  • 出于各種考量與需求,容器在外觀上與虛擬機(jī)非常相似。舉例來(lái)說(shuō),二者皆擁有專(zhuān)有處理空間、能夠作為root執(zhí)行命令、提供專(zhuān)有網(wǎng)絡(luò)接口與IP地址、允許定制化路由及iptable規(guī)則,且可啟動(dòng)文件系統(tǒng)等等。
  • 容器與虛擬機(jī)間的最大區(qū)別在于,各容器系統(tǒng)共享主機(jī)系統(tǒng)的內(nèi)核


    容器和虛擬機(jī)結(jié)構(gòu)區(qū)別

2、Linux 容器相關(guān)的2個(gè)重要概念

  • Linux容器功能是基于 cgroups 和 Namespace 來(lái)實(shí)現(xiàn)的. 所以要了解 Linux 容器必須先了解 cgroup 和 Namespace.
cgroups(控制組)
  • cgroups 是將任意進(jìn)程進(jìn)行分組化管理的 Linux 內(nèi)核功能.通過(guò)cgroups可以有效的隔離各類(lèi)進(jìn)程, 同時(shí)還可以控制進(jìn)程的資源占用(CPU, 內(nèi)存等等)情況.
Namespace (命名空間)
  • 使用Namespace, 可以讓每個(gè)進(jìn)程組有獨(dú)立的PID, IPC和網(wǎng)絡(luò)空間.
    Namespace的生效主要是通過(guò) clone系統(tǒng)調(diào)用來(lái)實(shí)現(xiàn)的.
    clone系統(tǒng)調(diào)用的第3個(gè)參數(shù)flags就是通過(guò)設(shè)置Namespace來(lái)劃分資源的.

二、lxc概述

image.png
  • LXC為L(zhǎng)inux Container的簡(jiǎn)寫(xiě)。可以提供輕量級(jí)的虛擬化,以便隔離進(jìn)程和資源,而且不需要提供指令解釋機(jī)制以及全虛擬化的其他復(fù)雜性。相當(dāng)于C++中的NameSpace。容器有效地將由單個(gè)操作系統(tǒng)管理的資源劃分到孤立的組中,以更好地在孤立的組之間平衡有沖突的資源使用需求。與傳統(tǒng)虛擬化技術(shù)相比,它的優(yōu)勢(shì)在于:
    • (1)與宿主機(jī)使用同一個(gè)內(nèi)核,性能損耗??;
    • (2)不需要指令級(jí)模擬;
    • (3)不需要即時(shí)(Just-in-time)編譯;
    • (4)容器可以在CPU核心的本地運(yùn)行指令,不需要任何專(zhuān)門(mén)的解釋機(jī)制;
    • (5)避免了準(zhǔn)虛擬化和系統(tǒng)調(diào)用替換中的復(fù)雜性;
    • (6)輕量級(jí)隔離,在隔離的同時(shí)還提供共享機(jī)制,以實(shí)現(xiàn)容器與宿主機(jī)的資源共享。
  • Linux Container提供了在單一可控主機(jī)節(jié)點(diǎn)上支持多個(gè)相互隔離的server container同時(shí)執(zhí)行的機(jī)制。Linux Container有點(diǎn)像chroot,提供了一個(gè)擁有自己進(jìn)程和網(wǎng)絡(luò)空間的虛擬環(huán)境,但又有別于虛擬機(jī),因?yàn)閘xc是一種操作系統(tǒng)層次上的資源的虛擬化。

三、lxc的簡(jiǎn)單應(yīng)用

1、安裝

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

2、簡(jiǎn)單使用

  • lxc-checkconfig:檢查系統(tǒng)環(huán)境是否滿足容器使用要求;
[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:創(chuàng)建lxc容器;

格式:lxc-create -n NAME -t TEMPLATE_NAME
lxc-start:?jiǎn)?dòng)容器;
lxc-start -n NAME -d
lxc-info:查看容器相關(guān)的信息;
lxc-info -n NAME
lxc-console:附加至指定容器的控制臺(tái);
lxc-console -n NAME -t NUMBER
lxc-stop:停止容器;
lxc-destory:刪除處于停機(jī)狀態(tài)的容器;
lxc-snapshot:創(chuàng)建和恢復(fù)快照;

lxc自帶了很多模板,可以修改對(duì)應(yīng)模板中的配置

[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

有需要可修改對(duì)應(yīng)模板中倉(cāng)庫(kù)url,這里使用默認(rèn)即可

[base]
name=CentOS-$release - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$release&arch=$basearch&repo=os
baseurl=https:// xxxxxx #修改倉(cāng)庫(kù)路徑

創(chuàng)建容器

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

#容器創(chuàng)建后會(huì)自動(dòng)生成一個(gè)秘碼,可以使用下面命令修改秘碼
[root@node-64 templates]# chroot /var/lib/lxc/c1/rootfs passwd

#查詢(xún)?nèi)萜餍畔?[root@node-64 templates]# lxc-info --name c1

給新創(chuàng)建的容器創(chuàng)建網(wǎng)絡(luò),首先創(chuàng)建網(wǎng)橋

#安裝網(wǎng)橋工具
[root@node-64 ~]# yum install bridge-utils -y
#添加virbr0網(wǎng)橋
[root@node-64 ~]# brctl addbr virbr0
# 啟動(dòng)virbr0網(wǎng)橋
[root@node-64 ~]# ip link set dev virbr0 up
#給網(wǎng)橋添加地址
[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

#打開(kāi)核心轉(zhuǎn)發(fā)
[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


啟動(dòng)容器

[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:輸入密碼登錄容器

給容器配置網(wǎng)絡(luò)

#添加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 

#測(cè)試ping虛擬網(wǎng)橋
[root@c1 ~]# ping 10.0.0.254
#測(cè)試ping宿主機(jī)
[root@c1 ~]# ping 192.168.1.64
#測(cè)試ping外網(wǎng)
[root@c1 ~]# ping www.baidu.com

查詢(xún)?nèi)萜鬟\(yùn)行情況

[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的圖形管理界面

安裝圖形管理界面
#安裝依賴(lài)
[root@node-64 ~]# yum install python-flask  git -y

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

#啟動(dòng)
[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/  #啟動(dòng)端口

LXC Web登錄

LXC Web管理頁(yè)面

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、Docker 簡(jiǎn)介 Docker 兩個(gè)主要部件:Docker: 開(kāi)源的容器虛擬化平臺(tái)Docker Hub: 用...
    R_X閱讀 4,523評(píng)論 0 27
  • Docker容器技術(shù)已經(jīng)發(fā)展了好些年,在很多項(xiàng)目都有應(yīng)用,線上運(yùn)行也很穩(wěn)定。整理了部分Docker的學(xué)習(xí)筆記以及新...
    __七把刀__閱讀 11,638評(píng)論 0 58
  • 我喜歡將飛行時(shí)的兩三個(gè)小時(shí)用來(lái)讀讀書(shū)。在一個(gè)相對(duì)遠(yuǎn)離了地心引力的高空中,讀上兩三篇散文,那一段時(shí)間里,什么都不用想...
    李楊手記閱讀 579評(píng)論 3 1
  • 情不知所起,一往而情深。前段時(shí)間朋友圈里都在曬電影——我的前任3。 看過(guò)的人,據(jù)說(shuō)都哭的撕心裂肺。我親眼目睹了我的...
    芳華似水閱讀 696評(píng)論 0 1
  • 王菲在《幻樂(lè)之城》的綜藝首秀,想必給很多人帶去了驚喜,無(wú)不驚嘆《重慶森林》里古怪精靈、心思剔透的阿菲又回來(lái)了。 蓬...
    弛雪由疆閱讀 7,059評(píng)論 0 2

友情鏈接更多精彩內(nèi)容