Linux 容器的用

by admin on 2018年10月11日

Linux 容器的以

Linux 容器在 v2.6.29版后虽入到根本之中了, 之前则也闻讯了,
但一直没太留心, 一直使用 KVM 来创造虚拟机.
以至于新近 Docker 大出风头, 才起关注. 想询问一下 Linux 容器究竟是呀?
与存活虚拟机技术(Xen, KVM等)有啊分别?

Linux 容器技术出现的特别早, 其实也是一直虚拟化技术, 但似乎一直尚未 Xen,
KVM 这些来的生名.
同时, 在实现原理及, 和Xen, KVM之类的吧是发坏可怜区别的.
脚简单说明下时4类虚拟技术之分: (下面说明中, VM:虚拟机, HOST:主机,
即安装虚拟机的机械)

  1. 风土人情的虚拟化技术 (VirtualBox, VMware)
    透过在Linux上设置虚拟化软件, 然后透过虚拟化软件来装虚拟机系统,
    大致结构如下:

     VM1  VM2 VM3 … …                                   
                 VirtualBox or VMWare or …                
                    Linux Kernel                            
                     硬件                                   

    VM是出于虚拟化软件(VirtualBox, VMWare…)来保管的, Linux
    Kernel不克直接管制至各个VM.

  2. Xen (半虚拟化)
    Xen是Linux上历史比较丰富的虚拟化技术, 它的虚拟化结构大体上如下:

     Linux Kernel  VM1  VM2 VM3 … …                     
                     Xen                                    
                     硬件                                   

    Xen的虚拟化原理是在 Linux Kernel和硬件之间投入一交汇 Xen代码,
    有Xen来管理Linux Kernel和其余的VM.

  3. KVM (最新的虚拟化技术)
    相对而言另的虚拟化技术, KVM是较新的, 它用CPU的支持.
    它的虚拟化结构大体上如下:

     VM1  VM2 VM3 … …                                   
                     KVM (由内核管理)                       
                    Linux Kernel                            
                     硬件                                   

    其一组织及人情的虚拟化技术好类似, 有几许不同的凡, KVM和Linux
    Kernel是紧密结合的,
    从而Linux Kernel能够又好之管理 VMs,
    VM的性能会比传统的虚拟化技术更好.

  4. Linux 容器 (LXC – linux container)
    LXC 是杀轻量级的, 它将 VM 的历程也装作成 HOST 的进程.
    大致的组织如下:

     p1(HOST), p2(VM), p3(VM), p4(HOST)……               
                  Linux Kernel                              
                     硬件                                   

    这就是说, 对于一些系统经过, PID是稳的, 比如 init进程的PID=1, VM中之
    init进程的PID是何等处理的呢?
    本来, VM的 init进程的PID在 HOST的过程表中会显示成其他PID(>1).

    于者可以观看, LXC这种虚拟化, VM的长河就比如HOST的过程同运行, 管理,
    所以创建与销毁都是深便捷的.

: 参考
http://veck.logdown.com/posts/200566-compare-of-kvm-and-lxc

文|可妮

Linux 容器相关的2只基本点概念

Linux容器功能是依据 cgroups 和 Namespace 来兑现的. 所以若了解 Linux
容器必须先行了解 cgroup 和 Namespace.


cgroups

cgroups 是拿随机进程展开分组化管理之 Linux 内核功能.
经cgroups可以中的隔离各类进程, 同时还可决定过程的资源占用(CPU,
内存等等)情况.
动示例: (debian v7.6 x86_64)

mount -t tmpfs cgroup_root /sys/fs/cgroup
mkdir /sys/fs/cgroup/test
mount -t cgroup -ocpuset test /sys/fs/cgroup/test

这时, test目录就是一个 cgroup, 这里 -o 指定了 cpuset,
cpuset是Linux中既定的同一栽cgroup, 后面有时光还描绘博客详细介绍.
test 目录有cgroup必须的一一文件

cd /sys/fs/cgroup/test
ls -l
total 0
-rw-r--r-- 1 root root 0 Aug 14 14:34 cgroup.clone_children
--w--w--w- 1 root root 0 Aug 14 14:34 cgroup.event_control
-rw-r--r-- 1 root root 0 Aug 14 14:34 cgroup.procs
-rw-r--r-- 1 root root 0 Aug 14 14:34 cpuset.cpu_exclusive
-rw-r--r-- 1 root root 0 Aug 14 14:34 cpuset.cpus
-rw-r--r-- 1 root root 0 Aug 14 14:34 cpuset.mem_exclusive
-rw-r--r-- 1 root root 0 Aug 14 14:34 cpuset.mem_hardwall
-rw-r--r-- 1 root root 0 Aug 14 14:34 cpuset.memory_migrate
-r--r--r-- 1 root root 0 Aug 14 14:34 cpuset.memory_pressure
-rw-r--r-- 1 root root 0 Aug 14 14:34 cpuset.memory_pressure_enabled
-rw-r--r-- 1 root root 0 Aug 14 14:34 cpuset.memory_spread_page
-rw-r--r-- 1 root root 0 Aug 14 14:34 cpuset.memory_spread_slab
-rw-r--r-- 1 root root 0 Aug 14 14:34 cpuset.mems
-rw-r--r-- 1 root root 0 Aug 14 14:34 cpuset.sched_load_balance
-rw-r--r-- 1 root root 0 Aug 14 14:34 cpuset.sched_relax_domain_level
-rw-r--r-- 1 root root 0 Aug 14 14:34 notify_on_release
-rw-r--r-- 1 root root 0 Aug 14 14:34 release_agent
-rw-r--r-- 1 root root 0 Aug 14 14:34 tasks

其中有的文件介绍.

文件名 R/W 用途
release_agent RW 删除分组时执行的命令. 这个文件只存在于根分组
notify_on_release RW 设置是否执行 release\_agent. 为1时执行
tasks RW 属于分组的线程 TID 列表
cgroup.procs R 属于分组的进程 PID 列表. 仅包括多线程进程的线程leader的TID, 这点与 tasks 不同
cgroup.event_control RW 监视状态变化的分组删除事件的配置文件

当cgroup中还好起子cgroup, 建立之道很简单, 只要创造文件夹即可.

cd /sys/fs/cgroup/test
mkdir test-child
ls -l test-child    # 创建了文件夹之后, 自动生成cgroup需要的文件
total 0
-rw-r--r-- 1 root root 0 Aug 14 15:10 cgroup.clone_children
--w--w--w- 1 root root 0 Aug 14 15:10 cgroup.event_control
-rw-r--r-- 1 root root 0 Aug 14 15:10 cgroup.procs
-rw-r--r-- 1 root root 0 Aug 14 15:10 cpuset.cpu_exclusive
-rw-r--r-- 1 root root 0 Aug 14 15:10 cpuset.cpus
-rw-r--r-- 1 root root 0 Aug 14 15:10 cpuset.mem_exclusive
-rw-r--r-- 1 root root 0 Aug 14 15:10 cpuset.mem_hardwall
-rw-r--r-- 1 root root 0 Aug 14 15:10 cpuset.memory_migrate
-r--r--r-- 1 root root 0 Aug 14 15:10 cpuset.memory_pressure
-rw-r--r-- 1 root root 0 Aug 14 15:10 cpuset.memory_spread_page
-rw-r--r-- 1 root root 0 Aug 14 15:10 cpuset.memory_spread_slab
-rw-r--r-- 1 root root 0 Aug 14 15:10 cpuset.mems
-rw-r--r-- 1 root root 0 Aug 14 15:10 cpuset.sched_load_balance
-rw-r--r-- 1 root root 0 Aug 14 15:10 cpuset.sched_relax_domain_level
-rw-r--r-- 1 root root 0 Aug 14 15:10 notify_on_release
-rw-r--r-- 1 root root 0 Aug 14 15:10 tasks

在意, 删除子cgroup的上, 要用 rmdir 来删除文件夹, 用 rm -rf
的方式无法去

cd /sys/fs/cgroup/test
rmdir test-child

: 参考内核文档 Documentation/cgroups/cgroups.txt

——If Winter comes, can Spring be far behind?

Namespace (命名空间)

运用Namespace, 可以于每个过程组有独立的PID, IPC和网络空间.
Namespace的见效主要是经过 clone系统调用来兑现之.
clone系统调用的第3单参数flags就是通过设置Namespace来分资源的.
参数种类如下:

名称 说明
CLONE_NEWIPC 划分IPC(进程间通信)命名空间, 信号量(semaphore), 共享内存, 消息队列等进程间通信用的资源
CLONE_NEWNET 划分网络命名空间. 分配网络接口
CLONE_NEWNS 划分挂载的命名空间. 与chroot同样分配新的根文件系统
CLONE_NEWPID 划分 PID 命名空间. 分配新的进程ID空间
CLONE_NEWUTS 划分 UTS(Universal Time sharing System)命名空间. 分配新的 UTS 空间

“저는 밤8시부터 10시까지 한국어를
공부합니다.”(晚上8:00及10:00每当习韩语)

Linux 容器的施用办法 (以下命令基于 debian v7.5)

  1. 安装 LXC

    apt-get install lxc
    lxc-checkconfig   # 安装完成后, 用这个命令检查系统是否可以使用 lxc
    # 我的debian系统上有个 missing
    Cgroup namespace: CONFIG_CGROUP_NSmissing
    # 对于这个missing, 可能是由于系统中没有挂载cgroup导致的, 挂载一个cgroup即可
    mount -t cgroup cgroup /mnt/cgroup
    
  2. 开创容器
    自从现有模板创建容器, 比较缓慢, 需要下载

    # 创建一个 debian 系统
    lxc-create -n test -t debian
    

    如此创建的器皿默认在 /var/lib/lxc/test 中,
    为了将容器创建以咱们指定的职务, 可以写个简易的部署文件
    lxc.conf, 里面只待同句

    lxc.rootfs = /home/lxc/test
    

    然后,

    lxc-create -n test -t debian -f /path/to/lxc.conf
    

    然, 就将容器创建于了 /home/lxc/test 中了, /var/lib/lxc/test
    中才生一个 config文件(这个config文件可以看成 lxc-create 命令 -f
    参数对应配置文件的参照)

  3. 开行容器
    起步后就进展入了虚拟机的控制台了. (果然像传说一样, 几秒就开行完成了
    ^_^)

    lxc-start -n test
    
  4. 终止容器
    于主机中输入停止的命令.

    lxc-stop -n test
    
  5. 销毁容器
    销毁之前, 可以由此 lxc-ls 来查阅有几只容器

    lxc-ls
      test
    lxc-destroy -n test
    lxc-ls
    

: 参考URL –
http://obdnmagazine.blogspot.com/2013/07/tested-lxc-080-rc1-debian-wheezyax3a6.html

自我在自习室,复习着最终一科考试韩语。忽然外边传来blingbling的响动,哦!又下雨了,硕大的雨点狠狠地奔不锈钢窗打去,本来专在心中复习的本身让立马雨声打扰了,也吓到了!握紧双手,心跳在抖!不知是镇,还是给随即黑夜冷雨的力量给征服了,教室内安装有前后两长连接上下楼的生水管,安静得非常之教室更加衬托出水管里之水流动的窸窣声!甚是惊悚!仿佛像某个horrible
movie的情。我因于前排,还吓,后面呢发和自家一样当认真复习的同室,我猜他们是曾经两罢了不闻窗外事,只有自身如此一个不寒而栗恐惧的食指乎才见面怀念这么多吧。

容器示例 – 配置python uliweb 开发条件

尝试当容器配置一糟糕开发条件, 然后通过复制容器, 形成多只虚拟机.

# 主机中
root@debian-113:~# uliweb   # 主机中没有安装uliweb 软件包
-bash: uliweb: command not found
root@debian-113:~# lxc-start -n test
# 虚拟机登录界面, 输入用户名和密码
# 虚拟机中
root@test:~# apt-get install python
root@test:~# apt-get install python-pip
root@test:~# pip install Uliweb
root@test:~# uliweb --version
Uliweb version is 0.3.1

主机中安网桥, 虚拟机用桥接方式上网, 确保每个虚拟机有单独的IP

# 主机中
root@debian-113:~# lxc-stop -n test
root@debian-113:~# apt-cache search bridge-utils
root@debian-113:~# brctl addbr br0
# 配置主机的网桥
root@debian-113:/var/lib/lxc/test# cat /etc/network/interfaces 
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
#auto eth0
iface lo inet loopback

# 追加的网桥配置    
auto br0
iface br0 inet static
address 192.168.1.113
netmask 255.255.255.0
gateway 192.168.1.1
   bridge_ports eth0
   bridge_stp on
   bridge_fd 0

root@debian-113:/var/lib/lxc/test# /etc/init.d/networking restart

部署容器的纱(也是当主机中改容器的布置文件)

root@debian-113:/var/lib/lxc/test# cat /var/lib/lxc/test/config
... ... (很多默认生成的配置)

# network  <-- 这个 network 相关的是要追加的
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
lxc.network.name = eth0

起先Linux容器哲学原理, 进入虚拟机

root@debian-113:/var/lib/lxc/test# lxc-start -n test
# 登录进入虚拟机, 确认虚拟机的IP
root@test:~# cat /etc/network/interfaces  <-- 默认是自动获取IP
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
root@test:~# ifconfig   <-- 我的机器自动分配的 192.168.1.167
# 创建一个简单的uliweb工程
root@test:~# cd /home/
root@test:/home# mkdir CM-web
root@test:/home# cd CM-web/
root@test:/home/CM-web# uliweb makeproject test
root@test:/home/CM-web# cd test/
root@test:/home/CM-web/test# uliweb makeapp first_app
root@test:/home/CM-web/test# uliweb runserver -h 0.0.0.0

启航Web服务后, 就可以主机的浏览器中 通过 http://192.168.1.167:8000/
来访问虚拟机中之web服务了.

末, 复制一个初的容器, 也不怕是再重复生成一个点的 python uliweb
开发条件

# 在主机中
root@debian-113:~# cd /var/lib/lxc
root@debian-113:/var/lib/lxc# cp -r test test2
# 修改 test2/config 如下
lxc.utsname = test2           <-- 修改名称
xc.rootfs = /home/lxc/test2   <-- 修改 rootfs位置
... ...                       <-- 其它部分不用修改, 和 test 一样就行
root@debian-113:/var/lib/lxc# cd /home/lxc/
root@debian-113:/home/lxc# cp -r test test2  <-- 重新复制一份 rootfs
root@debian-113:/home/lxc# lxc-start -n test2  <-- 启动 test2 虚拟机, 其中环境和 test一样, IP会不一样, 自动获取的
# 进入 test2 虚拟机中, 可以直接启动之前的 uliweb 测试工程, 也可以从主机中访问其web服务.

然的冷雨天已连发发好几天了,气温5°以下,但为终究降无顶得下雪的热度,瓢泼的大雨拼命打在宿舍明显台外的铁板上,耳根子完全不克冷静,也不怕象征本想在有些暖和点的宿舍窝看开复习的想法没有!可,这样的刮风飘雨冷冻的气象,连有单宿舍门外打个汤喝都使琢磨一下,又哪里期待着能生出魔力踏出门,去领略那大自然“创造的大笔”呢?

热度骤降了,北风刮了起来,校园绿树已秃头,干瘪枯黄的落叶为风吹了并且抱,落了同时自,只有树根下那倔犟的有些草还于挣扎,像极了教科书里描写的;买了早餐,新鲜出炉的馍握在脚下,还不曾开始吃就冷掉了;走去图书室复习,看到门前应该是早日便吊于了之隔气帘以保室内没有暖气的热度,外边是一整排悬挂在的伞,有些零星地耷拉在地上,里边是它的持有者,有穿在十分棉袄的,有戴在保暖帽的,有辱在口罩,有因为在于是围巾铺变成的垫子上的,有以戴在手套而写字慢的……座无虚席,只好另觅他地。反观自己吧无例外,毛发枯燥,皮肤缺水收缩,嘴唇发紫,手脚失去知觉,并非无加衣物,而是早就到非克重上的程度了。听听宿舍的床,人同样动,就吱呀吱呀地作,热胀冷缩的规律在就上证实得perfect!脱下毛衣,噼里啪啦的静电在摩着发生刺眼的明!不待任何,只看一两类就知时下的冬出多地要暖度!

因此诗人T.S.Eliot笔下的”Winter kept us
warm”冬天而我们温暖。?!是在南半球的冬天啊?常识和在经验既告诉我们,冬天便是制冷,冷就是冬天底symbol,温暖,存在的也?是的,一直是在,而且越来越冷存在感愈强。老师已说,冬天来,人们见面变得dormant
and
inactive(迟钝与懒),因为冷,外出少了,锻炼少了,动手少了,思考少了,连舍友说的“蹲在比较暖和”的想法啊叫自身钦佩人们以冬天底创意点,所以呢因为这个长日子惯于一个姿态,逐渐感受及身体发出不好受的信号,可是,就是熟视无睹,真心不思量当马上湿冷之氛围中进行翅膀用自身只有的体温去拥抱,我得储备温暖,我得积蓄毅力,我得重新坚持坚持……

莫清楚古代的文化人墨客是以欣赏那傲骨风霜的花魁或是松树而恋爱上冬天的为?抑或是她们认为冬天为比暖和吧?

自不恋冬天,也不恨冬天,大概是盖,能于天寒地冻之冬日会吃上暖暖的东西,泡在暖暖的开水,睡在暖暖的被窝而得到到就叫放了底幸福感吧!

生活,体验以及感恩同行。


哲学原理 1

=

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图