资源限制官方介绍

带有内存、CPU 和 GPU 的运行时选项

默认情况下,容器没有资源限制,可以使用主机内核调度程序允许的尽可能多的给定资源。Docker 提

供了控制容器可以使用多少内存或 CPU 的方法,设置 docker run 命令的运行时配置标志。本节提供有

关何时应该设置此类限制以及设置这些限制的可能影响的详细信息。

其中许多功能需要您的内核支持 Linux 功能。要检查支持,您可以使用该 docker info 命令。如果您的

内核中禁用了某个功能,您可能会在输出的末尾看到如下警告:

WARNING: no swap limit support

内存限制

# 下拉压测工具镜像
[root@docker01 ~]# docker pull lorel/docker-stress-ng

## 没有限制内存
--vm 指定N个进程(一个进程默认256M)
[root@docker01 ~]# docker run --name mem_test -it lorel/docker-stress-ng --vm 2

image-20230917193544232

# 进行限制
[root@docker01 ~]# docker run --name mem_test -m 500m -it lorel/docker-stress-ng --vm 2

image-20230917193634195

# 查看状态
docker stats

CPU 限制

# 不限制cpu
[root@docker01 ~]# docker run --name cpu_test --rm -it lorel/docker-stress-ng --cpu 8

image-20230917193839930

# 进行限制
[root@docker01 ~]# docker run --name cpu_test --cpus 1 --rm -it lorel/docker-stress-ng --cpu 8

image-20230917193957952

我们资源限制不是目的,目的是我们要随时监控到我们的资源,能看到容器对宿主机资源的使用,才能更好的做限制,不要盲目限制,不知道资源使用的情况下,就对容器资源限制,就是在作死。

Docker 监控命令

[root@docker01 ~]# docker top 容器名
[root@docker01 ~]# docker ps
[root@docker01 ~]# docker stats

有了上面的命令,我们就可以使用 zabbix 来监控 docker 容器了,但是问题就是,zabbix-agent 的端口,我们在宿主机上只能映射出来一个。

解决方案:
1.起多块网卡
2.每个容器装一个zabbix-server
3.修改不同容器的agent端口
4.映射容器的相关文件,然后监控宿主机上的对应文件
5.不用zabbix

容器监控 Prometheus

Prometheus:zabbix-server 提供服务端,一个监控页面
cAdvisor:zabbix-agent,获取容器中的数据
node_export:zabbix-agent,监控docker宿主机
grafana:图形化展示工具