Docker 资源控制
之前一直做docker的实验,可是遇到了好多问题,在ubuntu 12.04 环境下很难模拟出真实机器的环境,(尤其是hosts文件无法修改,服务无法启动。。。),就转战vagrant,放弃了一段时间。
最近docker 0.10 发布加上ubuntu14.04 的感觉docker用起来和顺手多了,所以捡起来慢慢研究。
docker和vagrant相比各有各的优势,之所以选择docker 是因为快,vagrant启动一个环境大概需要40s左右,而docker是几s,各方面也很灵活的打包,不过对于资源的掌控还是不能得心应手。
比如增加网卡,控制网卡的ip,控制内存的大小。
1. 如何增加一个额外的网卡并指定ip地址
可以通过--lxc-conf指定(0.7.2环境下可用,新版本还在研究)
2. 限制内存的使用
docker的命令中有一个-m参数可以限制容器使用的内存大小
-m, --memory="": Memory limit (format: <number><optional unit>, where unit = b, k, m or g)
加上-m参数一般会直接返回:WARNING: Your kernel does not support swap limit capabilities. Limitation discarded.
需要修改启动参数,重启
在/etc/default/grub中添加
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
执行sudo update-grub,并重启
docker run -i -t -m 32m ubuntu /bin/bash
进入容器,free -m 发现内存并没有变化(和host一样),但是确实在cgroup中做了限制,可以尝试用dd 消耗内存,看宿主的内存变化
事实上,已经被限制在32m的使用量了。
3. 限制cpu的使用
docker是基于lxc实现的,lxc又是基于cgroups完成,所以对于cpu的控制也是很随意的(O(∩_∩)O~)。
-c, --cpu-shares=0: CPU shares (relative weight)
docker run -i -t -m 32m -c 512 ubuntu /bin/bash
(1024 是基数,512就是分配为正常的一半的时间权重,2048就是正常的一倍,当然也可以是任意数值,只不过512 和 1024 比较好算比例)
未完待续。。。