Docker使用Linux自带的功能cgroup
Grouos是Linux内核系统提供的一种可以限制,记录,隔离进程组所在使用的物理资源的机制。
Docker借助这个机制,来实现资源的控制
Cgroup本身是提供将进程进行分组化管理的功能和接口的基础机构。分配控制的机制来实现资源控制。
Host:容器和宿主公用一个网络命名空间
Container容器和容器之间公用一个网络命令空间。
其他的资源依然是隔离的。
Linux通过CFS(completely Fair Scheduler 完全公平调度器)来调用各个进程对CPU的使用。CFS的调度100ms。我们也可以自定义容器的调度周期。已经在这个周期时间之内各个容器能够使用CPU的调度时间。
--cpu-period 设置容器调度CPU的周期
--cpu-quota 设置在每个周期内,容器可以使用CPU的时间。
可以配和使用
CFS周期的有效范围:1ms-1s --cpu-period 1000-1000000
容器使用CPU的配额时间必须要大于1ms, --cpu-quota的值,必须是 >=1000
Cat cpu.cfs_quots_us
-1
如果配置是1,那么容器在使用宿主机cpu的时间不做任何限制。
Cat cpu.cfs_period_us
100000
CFS调度周期的长度,微妙,在每个周期内,容器可以使用指定比例的cpu时间,默认情况都是100毫秒
CFS调度器,100毫秒就是定义了一个周期,在这个周期内,调度任务(容器)的基本时间单位。
100毫秒一次调度容器请求cpu的资源。然后内核吧cpu资源分配给容器。
Cpu.cfs_quota_us:调度器请求后,根据配额,内核分配给容器使用cpu的使用时间。
Docker stats test1/id 可以
设置容器占用CPU的权重比:需要多个容器 才能生效。
--cpu-shares 指定容器占用CPU的份额。模式权重1024 设置的值只能是1024的倍数。
--cpu-shares是给每个容器使用CPU设置了相对的权重,权重高的,可以使用CPU的资源更多,但是,如果只有一个容器在运行,即便设置了权重,但是没有其他更高的权重的容器来占用资源,权重低的容器依然不受限制。
设置容器绑定CPU容器只能使用指定的CPU核数
容器占用CPU的时间
容器占用CPU的权重比(多个容器时,才有效)
容器占用CPU的内核数,绑定指定CPU内核给容器使用。
内存:限制容器对内存的使用。
Docker stats 查看内存使用情况
创建3个容器,分别对这三台容器进行资源限制,
限制使用swap:想要限制容器使用swap。必须和限制内存一块使用。
如果限制了内存是512.swap是1G,那么容器实际上能够使用swap空间。1g-512m=512m
如果不设置:-m 512m 但是使用swap的空间是 -m 的两倍。
如果设置 --memory-swap的值,和内存限制一样容器就不能够使用swap。
-m 512m --memory-swap=-1,内存受限还是512m,但是容器使用swap空间不受限制。
磁盘I/O配置:读写
Oflag=direct
在使用dd获取空字符集是从文件系统的缓存当中输入,速度是比较快的,禁用文件系统缓存直接把数据写入到磁盘,可以更真实的测试设备的性能,模拟直接写入物理设备的情况。
删除已经停止的容器
删除所有未被使用的网桥设备
删除所有未被使用的镜像
删除创建容器时的缓存,以及无用的数据卷。