docker的资源控制

docker的资源控制:

对容器使用宿主机的资源进行限制。

cpi 内存 磁盘i/0

docker使用Linux自带的功能cgroup(control groups)

control groups 是Linux内核系统提供的一种限制,记录、隔离进程组所使用的物理资源的机制

docker借助这个机制实现资源控制

cgroup 本身是提供将进程进行分组化管理的功能和接口的基础结构。分配控制的机制来实现资源控制

host  容器和宿主机共用一个网络命名空间

container  容器和容器之间共用一个网络命名空间

其他的资源依然是隔离的

Q:如何对CPU的使用进行控制?

A:linux通过CFS(Completely Fair Scheduler 完全公平调度器),来调度各个进程对cpu的使用。CFS的调度100ms。

我们也可以自定义容器的调度周期。已经在这个周期时间之内各个容器能够使用pu的调度时间。

-cpu-period 设置容器调度cpu的周期

-cpu-quota 设置在每个周期内,容器可以使用cpu的时间

可以配置使用

CFS周期的有效范围: 1ms-1s    --cpu-period 1000~1000000

容器使用cpu的配额时间必须,大于1ms,--cpu-quota的值,必须是>=1000

cat cpu.cfs quota_us

如果配置是-1,那么容器在使用宿主机cpu的时间不做任何限制。

cat cpu.cfs period us

100000

CFS调度周期的长度,微秒。在每个周期内,容器可以使用指定比例的CPU时间,默认情况都是100毫秒

CFS调度器,100毫秒就是定义了一个周期,在这个周期内,调度任务(容器)的基本时间单位

100毫秒一次调度容器请求cpu的资源。然后内核把cpu资源分配给容器

docker stats test1/id 可以容器的运行占用宿主机资源的情况

docker top test1/id 查看容器内PID和宿主机pid的映射关系

设置容器占用cpu的权重比: 需要多个容器才能生效

--cpu-shares 指定容器占用cpu的份额。默认权重是1024,设置的值只能是1024的倍数

--cpu-shares是给每个容器使用cpu设置了相对的权重,权重高的,可以使用cpu的资源更多,但是,如果只有一个容器在运行,即便设置了权重,但是没有其他更高的权重的容器来占用资源,权重低的容器依然不受限

设置容器绑定cpu,容器只能使用指定的cpu内核

docker run -itd --name test5 --cpuset-cpus 1,3

容器占用cpu的时间

容器占用cpu的权重比 (多个容器时,才有效)

容器占用cpu的内核数,绑定指定cpu内核给容器使用

如果限制了内存是512,swap是1G,那么容器实际上能够使用swap空间,1g-512m =512M

如果不设置: -m 512m 但是使用swap的空间是-m 的两倍

如果设置--memory-swap的值,和内存限制一样,容器就不能使用swap

-m 512m --memory-swap=-1,内存受限还是512M,但是容器使用swap空间不再限制

磁盘I/O配置:

限制容器在磁盘上的读速度:

docker run -itd

--name test8 --device-read-bps /dev/sda:1M centos:7

/bin/bash

限制容器在磁盘上的写速度:

docker run -itd --name test9 --device-write-bps /dev/sda:1mb centos:7 /bin/bash

docker的资源控制_第1张图片

清理docker占用的磁盘空间

docker system prune -a

删除已经停止的容器

删除所有未被使用的网桥设备删除所有未被使用的镜像

删除创建容器时的缓存,以及无用的数据卷

怎么对容器使用cpu进行限制:

容器占用cpu的时间

容器占用cpu的权重

容器绑定cpu

容器的宿主机的内存使用限制:

m

swap 必须和

限制内存一起使用

-m 512m--memory-wap=1g

-m 512m --memory-wap=512m

m 512m--memory-wap=-1

磁盘I/0:

清理docker占用的磁盘空间

你可能感兴趣的:(docker,容器,运维)