Docker容器:磁盘&内存&CPU资源限制实战

1、首先先看看怎样查看这三项指标

一、先进入docker容器里

docker exec -it b6bac438271d /bin/bash

二、查看磁盘

在这里插入图片描述

三、查看内存

在这里插入图片描述

四、查看cpu

物理cpu:主板上实际插入的cpu数量,能够数不重复的 physical id 有几个(physical id)
cpu核数:单块CPU上面能处理数据的芯片组的数量
逻辑cpu:通常状况下,逻辑cpu=物理CPU个数×每颗核数算法

1.物理cpu数:[root@server ~]# grep 'physical id' /proc/cpuinfo|sort|uniq|wc -l

2.cpu核数:[root@server ~]# grep 'cpu cores' /proc/cpuinfo|uniq|awk -F ':' '{print $2}'

注:top命令输入后,出现以下界面,再按1,能够看逻辑cpu,及每一个核的cpu使用状况。docker

在这里插入图片描述注:上面这样子看的和在宿主机上经过这些命令看,你会发现docker容器和宿主机都是同样的,这是为何呢?
首先咱们要知道,docker默认容器和宿主机时共享全部的cpu、内存、磁盘资源的,因此这样看都是同样的。为了避免让个别容器由于受到攻击,大肆占用资源,形成其余容器也崩溃,咱们须要对每一个容器的资源多少进行限制。那么就有这两个问题:怎样看准确的呢?怎样对容器使用的这些资源进行限制呢?shell

2、怎样准确查看每一个容器的资源消耗状况呢?

查看磁盘:只有上面这样子看!
查看每一个容器的内存、cpu消耗状况:centos

#宿主机上输入命令
docker stats #这是实时查看cpu、内存消耗状况
docker stats --no-stream #查看瞬间的cpu、内存消耗状况

在这里插入图片描述

3、怎样对每一个容器使用的这些资源进行限制呢?

若是咱们买过云主机,那么每一个云主机的磁盘、cpu、内存都有明确的配置,好比我买的阿里云主机就是40G的硬盘、1核cpu、2G内存。咱们接下来就是须要对容器进行这样的限制。bash

一、cpu、内存限制

docker run -itd --cpuset-cpus=0-0 -m 4MB docker.io/jdeathe/centos-ssh /bin/bash
--cpuset-cpus:设置cpu的核数,0-0、1-一、2-2...(这种是绑定cpu,把本虚拟机绑定在一个逻辑cpu上);0-一、0-二、0-3和0,一、0,二、0,3(这两种形式都是指定多个逻辑cpu,每次随机使用一个逻辑cpu,至关因而共享cpu)
#注意:一个docker容器绑定一个逻辑cpu便于监控容器占用cpu的状况;而共享cpu能够更好利用cpu资源,并且要选好cpu调度算法!
-m:设置内存的大小

我设置两核cpu,它报错了:
在这里插入图片描述报错的意思是:守护进程的错误响应:请求的CPU不可用-请求的0-1,可用:0。
说明我们的vmware虚拟机建立时只给了1核,因此这里不能给两核!
在这里插入图片描述查看cpu、内存是否限制成功:
在这里插入图片描述内存、cpu限制成功!这个查看容器的cpu核数的方式不知道应该怎样查看!我后面加了cpu,而后试了下,top命令和经过看cpuinfo文件都不能查看出一个容器占用的cpu资源实际状况!ssh

二、磁盘大小限制

(1)备份镜像、容器文件
  • 备份镜像
docker save docker.io/centos >/root/centos-image.tar
  • 备份docker容器
先docker commit把容器提交成镜像,再备份镜像便可
(2)修改docker配置文件

docker配置文件:/etc/sysconfig/docker(注意不是docker-storage文件)中,OPTIONS参数后面添加以下代码:ui

OPTIONS='--storage-opt overlay2.size=40G'

在这里插入图片描述重启docker,报错:阿里云

systemctl status docker.service -l

在这里插入图片描述注:project Quota(目录配额)
解释:Overlay2 Docker磁盘驱动模式,若是要调整其大小,须要让Linux文件系统设置为xfs,而且支持目录级别的磁盘配额功能;spa

(3)接下来咱们就作支持目录级别的磁盘配额功能

首先理解什么叫支持目录的磁盘配额?
答:就是支持在固定大小目录中分配磁盘大小。目录有大小怎么理解?将一个固定大小的硬盘挂载到此目录,这个目录的大小就是硬盘的大小。而后目录可分配指定大小的硬盘资源给其下的文件.net

  • 添加新的硬盘
    在这里插入图片描述注:/dev/sdb就是我添加的磁盘!

  • 格式化硬盘为xfs文件系统格式

mkfs.xfs -f /dev/sdb
  • 建立data目录,后续将做为docker数据目录;
mkdir /data/ -p
  • 挂载data目录,而且开启磁盘配额功能(默认xfs支持配额功能)
mount -o uquota,prjquota /dev/sdb /data/
#把/dev/sdb这块新建硬盘挂载到/data/,且让/data/目录分别支持用户级别和目录级别的配额!其实只须要prjquota就好了,不须要uquota。

在这里插入图片描述上图证实/data目录的大小已经被限制!!
那么支持目录的磁盘目录配额就是,支持将20G的/data/目录可分配这20G磁盘大小!

  • 查看配额-配置详情,命令以下:
xfs_quota -x -c 'report' /data/

在这里插入图片描述运行了xfs_quota这个命令后,显示如上,说明,/data/这个目录已经支持了目录配额功能!

(4)从/data/docker/做软连接到/var/lib下

mkdir /data/docker
mv /var/lib/docker/* /data/docker/
rm -rf /var/lib/docker/
ln -s /data/docker /var/lib/

在这里插入图片描述这个样子,不支持目录级别的磁盘配额功能的/var/lib/docker/目录,就变成支持目录级别的磁盘配额功能软连接到/data/docker/目录下的/var/lib/docker/目录
(5)docker load加载备份的镜像,并运行容器,查看磁盘大小

docker load < /root/centos-image.tar
docker run -itd --privileged --cpuset-cpus=0-1 -m 4048M docker.io/centos /bin/bash

在这里插入图片描述磁盘大小限制为10G成功!
在这里插入图片描述内存大小限制为4G成功!

三、最后注意点

不管是磁盘大小的限制、仍是cpu、内存,它们都不能超出实际拥有的大小! 好比我这台vmware的内存是4G、cpu两核、硬盘20G(由于这里可配额的/data/目录就只有20G),由于centos系统运行还须要占部份内存,因此容器指定内存最好不要超过3G,cpu不能超过两核(即0-0、1-1;0-1均可以)、硬盘不能超过20G(最好在15G如下)

相关文章
相关标签/搜索