Docker的资源限制


介绍

官网:https://docs.docker.com/engine/containers/resource_constraints/
带有内存、CPU 和 GPU 的运行时选项
默认情况下,容器没有资源限制,可以使用主机内核调度程序允许的尽可能多的给定资源。Docker 提供
了控制容器可以使用多少内存或 CPU 的方法,设置docker run命令的运行时配置标志。本节提供有关何
时应该设置此类限制以及设置这些限制的可能影响的详细信息。
其中许多功能需要您的内核支持 Linux 功能。要检查支持,您可以使用该 docker info命令。如果您的内核中禁用了某个功能,您可能会在输出的末尾看到如下警告:
WARNING: no swap limit support

Docker的内存限制

Docker限制内存的相关参数
## 内存限制

# 没有内存限制
[root@docker02 ~]# docker run --name mem_test -it --rm akarshes/docker-stress-ng --vm 8
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
8fe1de9d0171 mem_test 67.39% 1.961GiB / 7.777GiB 25.22% 656B / 0B 0B / 0B 17

# 做了内存限制
[root@docker02 ~]# docker run --name mem_test -it --rm -m 200m akarshes/docker-stress-ng -m 8
[root@docker02 ~]# docker run --name mem_test -it --rm -m 200m akarshes/docker-stress-ng --vm 8
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
b45d2b26082f mem_test 0.00% 199.9MiB / 200MiB 99.94% 656B / 0B 27.9MB / 834MB 15
# 查看容器占用资源情况
[root@docker02 ~]# docker stats


# 查看压测帮助
docker run --name mem_test -it --rm akarshes/docker-stress-ng--help
-m N, --vm N start N workers spinning on anonymous mmap
	--vm-bytes N allocate N bytes per vm worker (default 256MB)

-c N, --cpu N start N workers spinning on sqrt(rand())
	--cpu-ops N stop after N cpu bogo operations

-l P, --cpu-load P load CPU by P %%, 0=sleep, 100=full load (see -c)

-i N, --io N start N workers spinning on sync()
	--io-ops N stop sync I/O after N io bogo operations
	--iomix N start N workers that have a mix of I/O operations
-	-iomix-bytes N write N bytes per iomix worker (default is 1GB)


Docker限制CPU

# 没做CPU限制
[root@docker02 ~]# docker run --name mem_test -it --rm akarshes/docker-stress-ng --cpu 8
[root@docker02 ~]# docker run --name mem_test -it --rm akarshes/docker-stress-ng -c 8

# 限制CPU
[root@docker02 ~]# docker run --name mem_test -it --rm --cpus 0.5 akarshes/docker-stress-ng -c 8


Docker自带的监控命令

[root@docker02 ~]# docker ps
[root@docker02 ~]# docker top e346006aff2a
[root@docker02 ~]# docker top jenkins
[root@docker02 ~]# docker stats
有了上面的命令,我们就可以使用zabbix来监控docker容器了,但是问题就是, zabbix-agent 的端口,我们在宿主机上只能映射出来一个。

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