默认情况下,一个容器的运行是没有任何资源限制的,可以耗尽内核分配给容器的所有资源。Docker 提供了控制容器使用内存、CPU的方法。限制容器使用的资源依赖于 Linux capabilities。

限制容器使用的内存资源

  • -m 或 —memory=:限制容器能使用的物理内存大小
  • —memory-swap *:限制容器能使用的交换内存,需要配合-m 选项一起使用

image.png

  • —memory-swappiness [0-100]:容器使用交换内存的倾向性,0表示能不用就不用。
  • —memory-reservation:预留内存空间
  • —oom-kill-disable:禁止因 oom 被 kill,需要配合-m 使用

验证内存限制

  1. docker run --name stress -it --rm -m 256m lorel/docker-stress-ng --vm 2
  2. docker top stress
  3. docker stats

image.png

限制容器使用的 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 top
image.pngdocker stats
image.png