首页 > 代码库 > Docker 资源控制

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 比较好算比例)

 

未完待续。。。