资源管理
Docker通过Cgroup 来控制容器使用的资源配额,包括CPU、内存、磁盘三大方面,基本覆盖了常见的资源配额和使用量控制
为什么做资源管理
当多个容器运行时,防止某容器把所有的硬件都占用。比如一台被攻击的容器可能会无限占用资源
容器主机名
语法:
docker run -it --name 容器名 -h 主机名 镜像 要执行的命令
创建一个容器实例
docker run -it --name docker3 -h zxdoc.cn centos /bin/bash
容器启动策略管理
参数:
--restart=[value] #参数可以指定一个重启策略
Docker容器的重启策略([value])如下:
no 默认策略,守护进程启动时不自动重新启动容器。
on-failure[:max-retries] 仅当容器以非零状态退出时才重新启动。[:max-retries]可选项,限制Docker守护进程尝试的重启重试次数。若超过指定次数未能启动容器则放弃。
always 无论容器的当前状态如何,容器也总是在守护进程启动时启动。
unless-stopped 容器在守护进程启动之前已被置于停止状态,则不在守护进程启动时启动它。
容器启动策略修改语法:
docker update --restart=[value] [ID或name]#更新配置
资源管理之-CPU控制
权重参数:
-c, --cpu-shares int #指定容器所使用的CPU权重值(相对)
默认每个docker容器的CPU权重值都是1024,在同一个CPU核心上,同时运行多个容器时,容器的CPU加权的效果才能体现出来。
容器A的进程一直是空闲的,那么容器B是可以获取比容器A更多的CPU时间片的;
主机上只运行了一个容器,即使它的CPU权重只有50,它也可以独占整个主机的CPU资源。
亲和力参数:
--cpuset-cpus #可以绑定CPU核心个数
--cpuset-mems #绑定内存个数,用于多处理器的设计
对多核CPU和多内存节点的服务器,docker还可以控制容器运行限定使用哪些CPU内核和内存节点,即使用--cpuset-cpus和 --cpuset-mems参数。可以对需要高性能计算的容器进行性能最优的配置。
实例操作:
1、 指定docker10只能在CPU0和CPU1上运行,并且docker10的使用CPU的权重 512。
docker run -itd --name docker10 --cpuset-cpus 0,1 --cpu-shares 512 centos bash
2、指定docker20只能在CPU0和CPU1上运行,而且docker20的使用CPU的权重1024,比dcker10多一倍。
docker run -itd --name docker20 --cpuset-cpus 0,1 --cpu-shares 1024 centos bash
资源管理之-内存管理
参数:
-m, --memory bytes #限制容器的内存使用大小
例子:
例1:允许容器使用的内存上限为128M
docker run -it -m 128m centos bash
例2:容器只使用2个CPU 核心,只能使用128M内存
docker run -it --cpuset-cpus 0,1 -m 128m centos
资源管理之-I/O控制
参数:
--device-read-bps list #限制此设备上的每秒读速度
--device-write-bps list #限制此设备上的每秒写速度
一台存储给2000台云主机使用,需要控制一下。防止某台云主机吃光你的磁盘I/O资源。
例:
限制容器实例对硬盘的最高写入速度设定为1MB/s
docker run -it --device-write-bps /dev/sda:1mb centos bash
资源管理之-容器自动删除
参数:
--rm #当容器命令运行结束后,自动删除容器,并释放资源。
应用场景:在某些环境下,可能需要大量的新建docker实例,然后仅仅运行几秒钟或几分钟,然后就彻底删除。如运行单元测试或测试弹性云计算。
例:创建一个容器,等待20秒后自动删除。
docker run -itd --rm --name zxtest centos sleep 20