Docker资源配额和数据持久化
Docker可以对容器使用的资源(CPU、内存、IO)进行配额控制,Docker对于所有资源的分配都是通过cgroup来进行的资源配额。
cgroup是Control Groups的缩写,是Linux内核提供的一种可以限制、记录、隔离进程所使用的物理资源(cpu、内存、IO)的一种技术,被LXC、docker等很多项目用于实现进程对应资源的控制。
指定容器在哪几个core上运行
指定容器在cpu0,1上运行
docker run -itd --name docker10 --cpuset-cpus 0,1 --cpu-shares 512 centos /bin/bash
给容器实例分配512权重的cpu使用份额
docker run --help | grep cpu-shares
# 查看配置份额的帮助命令
cpu 配额参数:-c,--cpu-shares int
CPU shares (relative weight)在创建容器时指定容器所使用的CPU份额值。cpu-shares的值不能保证可以获得1个vcpu或者多少Ghz的cpu资源,仅仅只是一个弹性的加权值。默认每个docker容器的cpu份额值都是1024.在同一个cpu核心上,同时运行多个容器时,容器的cpu加权的效果才能体现出来。
例如:两个容器A、B的cpu份额分别为1000和500,结果会怎么样?
情况1:A和B正常运行,占用同一个CPU,在cpu进行时间片分配的时候,容器A比容器B多一倍的机会获得CPU的时间片。
情况2:分配的结果取决当时其他容器的运行状态。比如容器A的进程一直是空闲的,那么容器B是可以获取比容器A更多的CPU时间片的;比如主机上只运行了一个容器,即使它的cpu份额只有50,它也可以独占整个主机的cpu资源。
cgroups只在多个容器同时争抢同一个cpu资源是,cpu配额才会生效。因此,无法单纯根据某个容器的cpu份额来确定有多少cpu资源分配给它,资源分配结果取决于同时运行的其他容器的cpu分配和容器中进程运行情况。
给容器实例分配512权重的cpu使用份额
docker run -it --cpu-shares 512 centos /bin/bash
cat /sys/fs/cgroup/cpu/cpu.shares
容器资源内存配额
允许容器使用的内存上限为128M:
docker run -it -m 128m centos
cat /sys/fs/cgroup/memory/memory.limit_in_bytes
容器资源IO配额
可以有效的防止某个docker容器吃光你的磁盘I/O资源
限制容器实例对磁盘的最该写入速度为1MB/s
mkdir -p /var/www/html/
docker run -it -v /var/www/html/:/var/www/html --device /dev/sda:/dev/sda --device-write-bps /dev/sda:1mb centos /bin/bash
time dd if=/dev/sda of=/var/www/html/test.out bs=1M count=50 oflag=direct,nonblock