如何将50%的CPU资源分配给docker容器?

kev*_*kev 22 docker

我有一个4核CPU,我想将50%的CPU资源分配给一个docker容器.
阅读docker-run手册和config.go源代码后.
我还是不知道如何使用该-c, --cpu-shares=0选项.

docker run -c 0.5 -i -t ubuntu /bin/bash
Run Code Online (Sandbox Code Playgroud)

要么

docker run -c 2 -i -t ubuntu /bin/bash
Run Code Online (Sandbox Code Playgroud)

Bry*_*yan 26

cpu-shares是一个'相对权重',相对于默认设置1024,所以如果你有两个容器在同一个核心上运行,你可以通过调整它来给它们50-50或80-20或任何你想要的CPU数字.这是一个整数.

您无法使用此标志给出总体限制,但您可以使用--cpuset 此处提到的限制容器运行的CPU集.

数字1024位于Cgroups文档中.

Marek Goldmann的博客文章解释了Docker中的资源管理.

另请参见为Docker容器设置CPU的绝对限制,它表示可以使用lxc(较旧的Docker实现)但不能使用libcontainer(当前的Docker实现).


use*_*322 13

这取决于环境,所以没有直接的答案,但继续阅读.

docker run --help命令:

-c, --cpu-shares=0         CPU shares (relative weight)
Run Code Online (Sandbox Code Playgroud)

由于Docker基于cgroups.CPU将分布在正在运行的容器中.默认情况下,该值为1024.

cat /sys/fs/cgroup/cpu/docker/cpu.shares
1024
Run Code Online (Sandbox Code Playgroud)



因此,如果我们有2个容器,一个用于数据库,另一个用于Web服务器

sudo docker run -c 614 -dit --name db postgres /postgres.sh
sudo docker run -c 410 -dit --name web nginx /nginx.sh
Run Code Online (Sandbox Code Playgroud)

db容器的60%(614是1024的60%)和web容器的40%.



进一步阅读请参阅:

  • cpu分享cgroups文档.
  • cpuset选项:--cpuset="" CPUs in which to allow execution (0-3, 0,1)
  • Docker帖子中的资源管理.
  • 第3章通过Shrikrishna Holla 配置本书的Docker容器Orchestating Docker.


Yaj*_*ajo 8

从 Docker 1.13 开始,在您的 4 核机器中只需添加docker container run --cpus 2.0 [args...].

这篇博文的解释:

但是,在 1.13 中,如果您希望将容器限制为一个 cpu,那么您只需添加--cpus 1.0到 Docker 运行/创建命令行即可。如果您想要两个半 CPU 作为容器的限制,那么只需添加--cpus 2.5. 在 Docker 中,我们使用 CFS 配额和周期来将容器的 CPU 使用率限制为您想要的,并为您进行计算。

还要检查文档