默认情况下,一个容器的运行是没有任何资源限制的,可以耗尽内核分配给容器的所有资源。Docker 提供了控制容器使用内存、CPU的方法。限制容器使用的资源依赖于 Linux capabilities。
限制容器使用的内存资源
- -m 或 —memory=:限制容器能使用的物理内存大小
- —memory-swap *:限制容器能使用的交换内存,需要配合-m 选项一起使用
- —memory-swappiness [0-100]:容器使用交换内存的倾向性,0表示能不用就不用。
- —memory-reservation:预留内存空间
- —oom-kill-disable:禁止因 oom 被 kill,需要配合-m 使用
验证内存限制
docker run --name stress -it --rm -m 256m lorel/docker-stress-ng --vm 2
docker top stress
docker stats
限制容器使用的 CPU 资源
大部分用户使用和配置的是 CFS scheduler,在 Docker 1.13或更高版本,还可以使用 realtime scheduler。
配置默认 CFS 调度器
- -cpu-shares:CPU 资源共享,按比例切分当前系统所有可用 CPU资源。如果容器都需要 CPU 资源,则按比例分配,如果CPU 资源空闲,也可以超过设定的比例获取 CPU资源。后期可能会被废弃
- —cpu=
:限制容器使用的 CPU 核心数 - —cpuset-cpus:指定容器使用具体的 CPU
验证 CPU 限制
docker run --name stress -it --rm --cpus 1 lorel/docker-stress-ng --cpu 8
docker topdocker stats