一夭委、linux容器
Linux 容器 (LXC - linux container)
- LXC 是非常輕量級(jí)的, 它將 VM 的進(jìn)程也偽裝成 HOST 的進(jìn)程. 與提供硬件虛擬化機(jī)制的虛擬機(jī)不同既棺,容器通過對(duì)“用戶空間”的抽象化處理提供操作系統(tǒng)層級(jí)的虛擬化機(jī)制。通過對(duì)容器進(jìn)行分解厘唾,大家將可以非常清晰地理解其中含義。
- 出于各種考量與需求预麸,容器在外觀上與虛擬機(jī)非常相似滔驶。舉例來說,二者皆擁有專有處理空間什燕、能夠作為root執(zhí)行命令粘勒、提供專有網(wǎng)絡(luò)接口與IP地址、允許定制化路由及iptable規(guī)則屎即,且可啟動(dòng)文件系統(tǒng)等等庙睡。
-
容器與虛擬機(jī)間的最大區(qū)別在于事富,各容器系統(tǒng)共享主機(jī)系統(tǒng)的內(nèi)核
2、Linux 容器相關(guān)的2個(gè)重要概念
- Linux容器功能是基于 cgroups 和 Namespace 來實(shí)現(xiàn)的. 所以要了解 Linux 容器必須先了解 cgroup 和 Namespace.
cgroups(控制組)
- cgroups 是將任意進(jìn)程進(jìn)行分組化管理的 Linux 內(nèi)核功能.通過cgroups可以有效的隔離各類進(jìn)程, 同時(shí)還可以控制進(jìn)程的資源占用(CPU, 內(nèi)存等等)情況.
Namespace (命名空間)
- 使用Namespace, 可以讓每個(gè)進(jìn)程組有獨(dú)立的PID, IPC和網(wǎng)絡(luò)空間.
Namespace的生效主要是通過 clone系統(tǒng)調(diào)用來實(shí)現(xiàn)的.
clone系統(tǒng)調(diào)用的第3個(gè)參數(shù)flags就是通過設(shè)置Namespace來劃分資源的.
二乘陪、lxc概述
- LXC為Linux Container的簡寫统台。可以提供輕量級(jí)的虛擬化啡邑,以便隔離進(jìn)程和資源贱勃,而且不需要提供指令解釋機(jī)制以及全虛擬化的其他復(fù)雜性。相當(dāng)于C++中的NameSpace谤逼。容器有效地將由單個(gè)操作系統(tǒng)管理的資源劃分到孤立的組中贵扰,以更好地在孤立的組之間平衡有沖突的資源使用需求。與傳統(tǒng)虛擬化技術(shù)相比流部,它的優(yōu)勢在于:
- (1)與宿主機(jī)使用同一個(gè)內(nèi)核戚绕,性能損耗小贵涵;
- (2)不需要指令級(jí)模擬列肢;
- (3)不需要即時(shí)(Just-in-time)編譯;
- (4)容器可以在CPU核心的本地運(yù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的簡單應(yīng)用
1焚鹊、安裝
[root@node-64 ~]# yum install epel-release -y
[root@node-64 ~]# yum install lxc lxc-templates -y
2痕届、簡單使用
- 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:啟動(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)模板中倉庫url绘证,這里使用默認(rèn)即可
[base]
name=CentOS-$release - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$release&arch=$basearch&repo=os
baseurl=https:// xxxxxx #修改倉庫路徑
創(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
#查詢?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
#打開核心轉(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
#測試ping虛擬網(wǎng)橋
[root@c1 ~]# ping 10.0.0.254
#測試ping宿主機(jī)
[root@c1 ~]# ping 192.168.1.64
#測試ping外網(wǎng)
[root@c1 ~]# ping www.baidu.com
查詢?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的圖形管理界面
安裝圖形管理界面
#安裝依賴
[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)端口
參考鏈接:https://www.cnblogs.com/wang_yb/p/3923040.html
https://baike.baidu.com/item/lxc/6014808