docker lxc cgroup namespace简述

余生长醉 提交于 2019-12-07 16:39:38

docker、lxc、cgroup、namespace是最近比较的技术。先了解一下他们分别是什么,然后说一下他们怎么用,具体实现机制以后再单独研究。

docker是lxc的管理器,lxc是cgroup的管理工具,cgroup是namespace的用户空间的管理接口。namespace是linux内核在task_struct中对进程组管理的基础机制。

再详细点说:

docker是用go来实现的,自动化了对lxc的管理过程,能够自动在线下载相应的发行版本的rootfs。

lxc可以直接chroot到任意的系统的rootfs上并通过cgroup的限制机制来控制容器内系统的资源占有率。

cgroup通过配置文件或者命令配置后,限制相应进程或一组进程使用的系统资源。

很明显,在lxc以上已经借助于chroot机制在一个限制的容器中运行一个完整的系统了,这样多个不通过虚拟化技术的新系统就在特定的占有物理资源的限制上运行起来。据说运行效率直逼实际机器。

下面说一下用法吧,先从下往上说:

cgroup

步骤:

  1. 在文件系统上建立层次结构
  2. 挂载文件系统并关联子系统
  3. 建立控制组
  4. 设置控制参数
  5. 将进程加入到控制组

通过/etc/cgconfig.conf配置或者cgroup-bin的相关指令来配置:

mount {

    cpuset = /sys/fs/cgroup/cpuset;

    momory = /sys/fs/cgroup/momory;

}

group cnsworder/my {

   perm {

        task {

               uid = root;

               gid = root;

        }

        admin {

              uid = root;

              gid = root;

        }

   }

    cpu {

         cpu.shares = 1000;

   }

}

命令如下

mount -t group -o cpu cpu /sys/fs/cgroup/cpuset

cgcreate -g cpu,momory:/cnsworder

chown root:root /sys/fs/cgroup/cpuset/cnsworder/my/*

chown root:root /sys/fs/cgroup/cpuset/cnsworder/my/task

cgrun -g cpu,momory:/cnsworder/my bash

lxc

建立新容器 lxc-create -n name -t type

删除容器 lxc-destory -n name

运行容器lxc-start -n name

运行容器中的指令 lxc-execute -n name command

停止运行容器 lxc-stop -n name

连接运行容器 lxc-attach -n name

配置cgroup lxc-cgroup -n name

你当然可以借助一下命令做更多的事情

lxc的配置文件位于/etc/lxc中

支持发行版本的template位于/usr/share/lxc/templates中,我的archlinux上支持的如下:

lxc-start和lxc-execute区别是lxc-execute会启动lxc-init进程来作为启动其他程序的入口。

对容器的资源控制配置在${path}/config中

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. lxc.mount = $path/fstab  
  2. lxc.pivotdir = lxc_putold  
  3.   
  4. lxc.devttydir =$ttydir  
  5. lxc.tty = 4  
  6. lxc.pts = 1024  
  7.   
  8. lxc.utsname = $name  
  9. lxc.arch = $arch  
  10. lxc.cap.drop = sys_module mac_admin mac_override  
  11.   
  12. # When using LXC with apparmor, uncomment the next line to run unconfined:  
  13. #lxc.aa_profile = unconfined  
  14.   
  15. lxc.cgroup.devices.deny = a  
  16. # Allow any mknod (but not using the node)  
  17. lxc.cgroup.devices.allow = c *:* m  
  18. lxc.cgroup.devices.allow = b *:* m  
  19. # /dev/null and zero  
  20. lxc.cgroup.devices.allow = c 1:3 rwm  
  21. lxc.cgroup.devices.allow = c 1:5 rwm  
  22. # consoles  
  23. lxc.cgroup.devices.allow = c 5:1 rwm  
  24. lxc.cgroup.devices.allow = c 5:0 rwm  
  25. #lxc.cgroup.devices.allow = c 4:0 rwm  
  26. #lxc.cgroup.devices.allow = c 4:1 rwm  
  27. # /dev/{,u}random  
  28. lxc.cgroup.devices.allow = c 1:9 rwm  
  29. lxc.cgroup.devices.allow = c 1:8 rwm  
  30. lxc.cgroup.devices.allow = c 136:* rwm  
  31. lxc.cgroup.devices.allow = c 5:2 rwm  
  32. # rtc  
  33. lxc.cgroup.devices.allow = c 254:0 rwm  
  34. #fuse  
  35. lxc.cgroup.devices.allow = c 10:229 rwm  
  36. #tun  
  37. lxc.cgroup.devices.allow = c 10:200 rwm  
  38. #full  
  39. lxc.cgroup.devices.allow = c 1:7 rwm  
  40. #hpet  
  41. lxc.cgroup.devices.allow = c 10:228 rwm  
  42. #kvm  
  43. lxc.cgroup.devices.allow = c 10:232 rwm  


docker

docker run -t type command直接在线下载

如果有dockerfile一切将变得更简单,借助于github你可以直接运行一个桌面环境

docker build -t cnsworder/docker-desktop git://github.com/rogaha/docker-desktop.git

docker run -d cnsworder

docker run常用的选项有:
  -e 设置容器的运行env环境变量
  -v 映射服务的一个目录到容器中
  -p 容器对服务器暴露的端口
  -c cpu使用的权重
  -m 限制容器的内存使用量
  -i 标准输出到当前term
  -t 分配一个tty

另外更让人羡慕的是借助有vargant可以在mac和windows上使用docker,当然vargant就是在virtualbox中跑了linux虚拟机。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!