您的位置:首页 > 运维架构 > Docker

docker lxc cgroup namespace入门

2013-12-01 10:48 661 查看
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

步骤:

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

通过/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虚拟机。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Linux lxc docker cgourp