docker资源管理

1. 简介

主要研究docker资源管理方面的问题,查看资源占用、管理占用资源…

docker可以管理的资源:网络资源、CPU、IO、内存

2.查看容器占用资源

查看容器占用的资源,该命令会以流的方式持续输出所有容器占用的资源情况

#docker stats 源代码帮助
Usage:  docker stats [OPTIONS] [CONTAINER...]

Display a live stream of container(s) resource usage statistics

Aliases:
  docker container stats, docker stats

Options:
  -a, --all             Show all containers (default shows just running)
      --format string   Format output using a custom template:
                        'table':            Print output in table format with column headers (default)
                        'table TEMPLATE':   Print output in table format using the given Go template
                        'json':             Print in JSON format
                        'TEMPLATE':         Print output using the given Go template.
                        Refer to https://docs.docker.com/go/formatting/ for more information about formatting output with templates
      --no-stream       Disable streaming stats and only pull the first result
      --no-trunc        Do not truncate output
docker stats [OPTIONS] [CONTAINER...]

OPTIONS 说明:

  1. –all , -a :显示所有的容器,包括未运行的。

  2. –format :指定返回值的模板文件。

  3. –no-stream :展示当前状态就直接退出了,不再实时更新。

  4. –no-trunc :不截断输出。

若想只显示一次当前资源占用情况,可以使用如下命令

docker stats --no-stream
# 启动一个容器
(MoeLove) ➜  ~ docker run -d redis                                                                        
c98c9831ee73e9b71719b404f5ecf3b408de0b69aec0f781e42d815575d28ada
# 查看其所占用资源的情况
(MoeLove) ➜  ~ docker stats --no-stream $(docker ps -ql) 
CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
c98c9831ee73        amazing_torvalds    0.08%               2.613MiB / 15.56GiB   0.02%               3.66kB / 0B         0B / 0B             4
CONTAINER ID容器的 ID,也是一个容器生命周期内不会变更的信息
NAME容器的名称,如果没有手动使用 --name 参数指定,则 Docker 会随机生成一个,运行过程中也可以通过命令修改
CPU %容器正在使用的 CPU 资源的百分比
MEM USAGE / LIMIT当前内存的使用及容器可用的最大内存
MEM %容器正在使用的内存资源的百分比
NET I/O容器通过其网络接口发送和接受到的数据量
BLOCK I/O容器通过块设备读取和写入的数据量
BLOCK I/O容器创建的进程或线程数

除了以table形式显示输出,还可以以 JSON 格式输出容器使用资源信息:

runoob@runoob:~$ docker stats nginx --no-stream --format "{{ json . }}"
  {"BlockIO":"0B / 13.3kB","CPUPerc":"0.03%","Container":"n
 ginx","ID":"ed37317fbf42","MemPerc":"0.24%","MemUsage":"2.352MiB / 982.5MiB","Name":"nginx","NetIO":"539kB / 606kB","PIDs":"2"}

输出指定的信息:

runoob@runoob:~$ docker stats --all --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}" fervent_panini 5acfcb1b4fd1 drunk_visvesvaraya big_heisenberg
  {"BlockIO":"0B / 13.3kB","CPUPerc":"0.03%","Container":"nginx","ID":"ed37317fbf42","MemPerc":"0.24%","MemUsage":"2.352MiB / 982.5MiB","Name":"nginx","NetIO":"539kB / 606kB","PIDs":"2"}

CONTAINER                CPU %               MEM USAGE / LIMIT
fervent_panini           0.00%               56KiB / 15.57GiB
5acfcb1b4fd1             0.07%               32.86MiB / 15.57GiB
drunk_visvesvaraya       0.00%               0B / 0B
big_heisenberg           0.00%               0B / 0B

自定义format的使用:
docker stats 命令支持我们通过 --format 选项自定义输出的内容和格式:
下面是自定义的格式中可以使用的所有占位符:
.Container 根据用户指定的名称显示容器的名称或 ID。
.Name 容器名称。
.ID 容器 ID。
.CPUPerc CPU 使用率。
.MemUsage 内存使用量。
.NetIO 网络 I/O。
.BlockIO 磁盘 I/O。
.MemPerc 内存使用率。
.PIDs PID 号。

#使用format指定输出方式
lab@lab-virtual-machine:~$ docker stats --no-stream --format \
> "{\"container\":\"{{ .Container }}\",\"memory\":{\"raw\":\"{{ .MemUsage }}\",\"percent\":\"{{ .MemPerc }}\"},\"cpu\":\"{{ .CPUPerc }}\"}"

3.管理docker占用的资源

我们可以重新启动一个容器,在 docker run 时,为它添加资源限制

Docker资源(CPU/内存/磁盘IO/GPU)限制与分配指南

还有一种动态更改资源限制的办法,使用 docker update 命令

Docker 容器的资源管理
docker update命令参数

#docker update 源代码帮助
Usage:  docker update [OPTIONS] CONTAINER [CONTAINER...]

Update configuration of one or more containers

Aliases:
  docker container update, docker update

Options:
      --blkio-weight uint16        Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0)
      --cpu-period int             Limit CPU CFS (Completely Fair Scheduler) period
      --cpu-quota int              Limit CPU CFS (Completely Fair Scheduler) quota
      --cpu-rt-period int          Limit the CPU real-time period in microseconds
      --cpu-rt-runtime int         Limit the CPU real-time runtime in microseconds
  -c, --cpu-shares int             CPU shares (relative weight)
      --cpus decimal               Number of CPUs
      --cpuset-cpus string         CPUs in which to allow execution (0-3, 0,1)
      --cpuset-mems string         MEMs in which to allow execution (0-3, 0,1)
  -m, --memory bytes               Memory limit
      --memory-reservation bytes   Memory soft limit
      --memory-swap bytes          Swap limit equal to memory plus swap: -1 to enable unlimited swap
      --pids-limit int             Tune container pids limit (set -1 for unlimited)
      --restart string             Restart policy to apply when a container exits

4.docker 资源管理 应用

这里以OAI与ueransim核心网为例子来应用上面的知识:

4.1查看核心网容器的资源占用:

#以表格形式输出,一直刷新
lab@lab-virtual-machine:~$ docker stats
#以表格形式输出,且只输出一次
lab@lab-virtual-machine:~$ docker stats --no-stream
#以json形式输出
lab@lab-virtual-machine:~$ docker stats --no-stream --format "{{ json . }}"
#查看单一容器的资源占用 88712c18c576为容器ID
lab@lab-virtual-machine:~$ docker stats --no-stream --format "{{ json . }}" 88712c18c576
#使用容器的名字代替id
docker stats $(docker ps --format={{.Names}})

如果想知道amf的cpu占用可以使用如下方法:

lab@lab-virtual-machine:~$ sudo docker stats --no-stream --format "{\"cpu\":\"{{ .CPUPerc }}\"}" 88712c18c576

在这里插入图片描述

4.2限制容器的资源使用

使用docker update在容器启动后限制容器的资源,在核心网启动后可以通过命令行限制容器的资源,在后续可以通过shell脚本一键限制所有核心网网元的资源:
先查看网元的资源使用:

lab@lab-virtual-machine:~$ docker stats --no-stream

sudo docker update --cpus "0.03" oai-udm

可以看见网元容器oai-udm的cpu可用资源已经被限制了
在这里插入图片描述
进一步还有如下一些命令可以使用:

#指定容器oai-udm只使用0.03的cpu,并且使用cpu内核1,即该容器只跑在第一个cpu上
docker update --cpus "0.03" --cpuset-cpus 0  oai-udm

docker 容器在docker run的时候或者容器运行时可以用docker update 来限制内存最大使用,但默认update 内存或者cpu是关闭的,需要在/etc/default/grub中添加一行如下:

GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

然后更新grub

update grub
                           限制网元内存使用的内存:
#限制oai-ext-dn使用的内存1G
root@ubuntu180402:/etc/ansible# docker update -m 1G --memory-swap 1G oai-ext-dn

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月早十

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值