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中
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虚拟机。
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 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程
- 基于 Linux 集群环境上 GPFS 的问题诊断
- 谁是桌面王者?Win PK Linux三大镇山之宝
- vivi下重新调整分区
- Linux VS Unix:Linux欲一统天下 Unix不死
- linux下设定环境变量
- Linux下修改MySQL编码的方法
- Linux串口通信
- 从Windows系统下访问Linux分区相关软件
- 看看我的Ubuntu Linux截图