限制可用的 CPU 个数--cpus

通过下面的命令创建容器,在docker 1.13开始支持–cpus,代码中–cpus=2 表示容器最多可以使用主机上两个 CPU,容器 CPU 的负载为 200%,它的含义为单个 CPU 负载的两倍。我们也可以把它理解为有两颗 CPU 在 100% 的为它工作。

在1.13之前使用–cpu-period和–cpu-quota,代码中100000 表示 100 毫秒,200000 表示 200 毫秒。它们在这里的含义是:在每 100 毫秒的时间里,运行进程使用的 CPU 时间最多为 200 毫秒(需要两个 CPU 各执行 100 毫秒)。参考:CFS BandWith Control

1
2
3
4
5
# docker 1.13开始有cpus
$ docker run -it --rm --cpus=2 debian

# 更早版本使用--cpu-period和--cpu-quota,
$ docker run -it --rm --cpu-period=100000 --cpu-quota=200000 debian

指定固定的 CPU--cpuset-cpus

cpus无法指定调用哪颗cpu,如果要实现指定cpu使用–cpuset-cpus,如果你的和我一样时4核心处理器echo $(nproc)查看,–cpuset-cpus=”0,1”表示调用0,1号核心

1
$ docker run -it --rm --cpuset-cpus="0,1" debian

设置使用 CPU 的权重--cpu-shares

当 CPU 资源充足时,设置 CPU 的权重是没有意义的。只有在容器争用 CPU 资源的情况下, CPU 的权重才能让不同的容器分到不同的 CPU 用量。–cpu-shares 选项用来设置 CPU 权重,它的默认值为 1024。

1
2
# 指定使用0核心,当发生抢占时,该容器最高使用50%的0号核心cpu性能
$ docker run -it --rm --cpuset-cpus="0" --cpu-shares=512

限制内存使用上限--memory|-m

限制容器可以使用的最大内存为 300M。-m(–memory=) 选项可以完成这样的配置

1
$ docker run -it --rm -m 300M --memory-swap=300M debian

限制可用的 swap 大小--memory-swap

–memory-swap 是必须要与 –memory 一起使用的。

正常情况下, –memory-swap 的值包含容器可用内存和可用 swap。所以 –memory=”300m” –memory-swap=”1g” 的含义为:
容器可以使用 300M 的物理内存,并且可以使用 700M(1G -300M) 的 swap。memory-swap=memory+swap(也表示内存最大上限)

把 –memory-swap 设置为 0 和不设置是一样的,此时如果设置了 –memory,容器可以使用的 swap 大小为 –memory 值的两倍。

如果 –memory-swap 的值和 –memory 相同,则容器不能使用 swap。

1
$ docker run -it --rm -m 300M --memory-swap=300M debian