1:Docker资源控制
1:docker底层有Cgroup机制;
2:Cgroup是control
3:group的简写,是Linux内核提供的一种限制使用物理资源的机制,这些资源只要包括CPU,内存,bikiio,下面将操作docker是如何使用Cgroup机制进行资源管理的。
4:对CPU的控制
《1》:限制CPU的使用率
在centos7中可以通过修改对应的Cgroup配置文件cpu.cfs_quota_us的值来实现,直接执行echo命令将设定值导入到文件中就会立即生效
<1>:docker rm -f $(docker ps -aq) 删除所有容器
<2>:docker run -itd centos /bin/bash 创建
<3>:docker ps -a 查看
<4>:ls /sys/fs/cgroup/cpu.cpuacct/docker 查看ID号的位置
<5>:ls /sys/fs/cgroup/cpu,cpuacct/docker/8f5d448e00ba8ec697ba7b0fd84fb1ae511c50416f56f8eedd34b85c6b610b4b/cpu.cfs_quota_us 查看
<6>:echo "20000" > /sys/fs/cgroup/cpu,cpuacct/docker/8f5d448e00ba8ec697ba7b0fd84fb1ae511c50416f56f8eedd34b85c6b610b4b/cpu.cfs_quota_us 输出
5:多任务按比例分享CPU
当多个容器任务运行时,很难计算CPU的使用率,为了使容器合理使用CPU资源,可以通过 --CPU-shares选项设置容器按比例共享CPU资源,这种方式还可以实现cpu使用率的动态调整
例如:运行三个新的容器A,B,C,占用cpu资源为1:1:2
docker run --name A -itd --cpu-shares 1024 centos /bin/bash
docker run --name B -itd --cpu-shares 1024 centos /bin/bash
docker run --name C -itd --cpu-shares 2048 centos /bin/bash
如果又一个容器D需要更多的cpu资源,则可以将其 --cpu--shares的值设置为4096,那么ABCD的cpu资源比例为1:1:2:4
6:限制cpu核心使用
在Docker中可以使用 --cpuset-cpus 选项来是其某些程序独享cpu核心,以便提高其处理速度,对应的Cgroup文件为/sys/fs/cgroup/cpuset/docker 容器ID号/cpuset.cpus .选项后直接跟参数0,1,2..表示一个内核,第二个内核,与/proc/cpuinfo 中标点相同
如果该容器内得进程只会在0,1,2,3,centos /bin/bash
那么该容器内得进程只会在0,1,2,3的cpu上运行
尽量使用绑定内核的方式分配cpu资源给容器进程使用,然后在配合 --cpu-share 选项动态调整cpu的使用资源的比例
7:对内存使用的限制
在Docker中可以通过docker run -m
命令来限制容器内存使用量,相应的Cgroup配置文件为/sys/ts/cgroup/cpuset/system.slice/docker-容器编号.scope/zemory.linit _in byteso但是需要注意,一旦容器Cgroup使用的内存超过了限制的容量,linux内核将会尝试收回这些内存,如栗仍旧没发控制使用内存在限制范围之内,进程就会被杀死。
例如,限制新建容器的内存上限为512NB
docker run -itd -aS12MB centos / bin/bash
8:对blkio的限制
如果在一台服务器上进行容器的混合部署,那么会存在同时几个程序写磁盘数据的情况,这时可以通过--davice-write-iops德项来飓制每秒写io次数来限制制定设备的写速度。和应的还有--device-read-bps选项可以限制读取的速度,但是这种方法只能限制设备,而不能限制分区,和应的cgroup写配置文件为/sys/fs/cgroup/blkio/docker-容器工D/bikio.throttle.write_bps_device.
例如,限制新建容器的/devl sda的写入速度为1MB。
docker run -itd --device-write-iops /dev/sda:1M镜像名/bin/bash