docker lxc cgroup namespace入门

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中

lxc.mount = $path/fstab
lxc.pivotdir = lxc_putold

lxc.devttydir =$ttydir
lxc.tty = 4
lxc.pts = 1024

lxc.utsname = $name
lxc.arch = $arch
lxc.cap.drop = sys_module mac_admin mac_override

# When using LXC with apparmor, uncomment the next line to run unconfined:
#lxc.aa_profile = unconfined

lxc.cgroup.devices.deny = a
# Allow any mknod (but not using the node)
lxc.cgroup.devices.allow = c *:* m
lxc.cgroup.devices.allow = b *:* m
# /dev/null and zero
lxc.cgroup.devices.allow = c 1:3 rwm
lxc.cgroup.devices.allow = c 1:5 rwm
# consoles
lxc.cgroup.devices.allow = c 5:1 rwm
lxc.cgroup.devices.allow = c 5:0 rwm
#lxc.cgroup.devices.allow = c 4:0 rwm
#lxc.cgroup.devices.allow = c 4:1 rwm
# /dev/{,u}random
lxc.cgroup.devices.allow = c 1:9 rwm
lxc.cgroup.devices.allow = c 1:8 rwm
lxc.cgroup.devices.allow = c 136:* rwm
lxc.cgroup.devices.allow = c 5:2 rwm
# rtc
lxc.cgroup.devices.allow = c 254:0 rwm
#fuse
lxc.cgroup.devices.allow = c 10:229 rwm
#tun
lxc.cgroup.devices.allow = c 10:200 rwm
#full
lxc.cgroup.devices.allow = c 1:7 rwm
#hpet
lxc.cgroup.devices.allow = c 10:228 rwm
#kvm
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虚拟机。

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值