如何使用docker对容器资源进行限制
问题窥探
在服务器当中,假设iis服务部署多个站点,那么只要其中一个站点出问题,假设是cpu100%,或者是内存爆满,那么这台服务器上的其他站点都会跟着挂掉。同样在使用容器时,单台主机上可能会跑几十个容器,容器虽然都相互隔离,但是用的却是与宿主机相同的内核,CPU、内存、磁盘等硬件资源。如果不对容器资源进行限制,容器之间就会相互影响。
解决办法
Docker提供了限制内存,CPU或磁盘IO的方法,可以对容器所占用的硬件资源大小以及多少进行限制,我们在使用dockercreate创建一个容器或者dockerrun运行一个容器的时候就可以来对此容器的硬件资源做限制。
内存限制
Docker提供的内存限制功能有以下几点:
1、容器能使用的内存和交换分区大小。
2、容器的核心内存大小。
3、容器虚拟内存的交换行为。
4、容器内存的软性限制。
5、是否杀死占用过多内存的容器。
6、容器被杀死的优先级
-m,--memory内存限制,格式是数字加单位,单位可以为b,k,m,g。最小为4M --memory-swap内存+交换分区大小总限制。格式同上。必须必-m设置的大 --memory-reservation内存的软性限制。格式同上 --oom-kill-disable是否阻止OOMkiller杀死容器,默认没设置 --oom-score-adj容器被OOMkiller杀死的优先级,范围是[-1000,1000],默认为0 --memory-swappiness用于设置容器的虚拟内存控制行为。值为0~100之间的整数 --kernel-memory核心内存限制。格式同上,最小为4M
用户内存限制就是对容器能使用的内存和交换分区的大小作出限制。
使用时要遵循两条直观的规则:
-m,--memory选项的参数最小为4M。 --memory-swap不是交换分区,而是内存加交换分区的总大小,所以--memory-swap必须比-m,--memory大。
cpu限制
dockerrun命令和CPU限制相关的所有选项如下:
--cpuset-cpus=""允许使用的CPU集,值可以为0-3,0,1 -c,--cpu-shares=0CPU共享权值(相对权重) cpu-period=0限制CPUCFS的周期,范围从100ms~1s,即[1000,1000000] --cpu-quota=0限制CPUCFS配额,必须不小于1ms,即>=1000 --cpuset-mems=""允许在上执行的内存节点(MEMs),只对NUMA系统有效
其中--cpuset-cpus用于设置容器可以使用的vCPU核。-c,--cpu-shares用于设置多个容器竞争CPU时,各个容器相对能分配到的CPU时间比例。--cpu-period和--cpu-quata用于绝对设置容器能使用CPU时间。
到此这篇关于如何使用docker对容器资源进行限制的文章就介绍到这了,更多相关docker容器资源限制内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。