docker如何使用其主机操作系统的CPU内核?

gex*_*tra 42 lxc docker

基于Docker基于LXC的事实,我的建议是Docker容器从其主机操作系统共享各种资源.我担心的是CPU内核.这是一个场景:

  • 主机Linux操作系统有8个核心
  • 我必须在上面的主机操作系统上部署一组docker容器.
  • 我需要部署的一些docker容器更适合使用2个内核

a)因此,如果我在该主机上运行所有docker容器,它们是否会根据需要消耗CPU /内核,就像它们是作为主机操作系统上的正常安装的应用程序一样运行?

b)docker容器是否会使用自己的进程,并且其中包含的所有处理都将粘贴到该父进程的CPU核心?

c)如何指定一个docker容器来使用多个内核(例如4个).我看到有一个-C标志可以指向核心ID,但似乎没有选项指定容器随机选择N个核心.

Oli*_*ews 8

目前,我认为docker不提供这种级别的粒度.它没有指定它在lxc.conf文件中分配的内核数量,因此您将获得每个docker的所有内核(可能是1,我不是100%肯定).

但是,您可以调整为给定容器生成的conf文件并设置类似的内容

cpuset {
    cpuset.cpus="0-3";
}
Run Code Online (Sandbox Code Playgroud)

  • 这并没有真正回答"如果容器中运行的应用程序是否会看到并使用所有8个内核,它是否会这样做?"的问题.但是,我在IRC询问过,情况确实如此.如果您在单个continer中运行多核进程并在另一个容器中运行另一个多核进程,那么资源争用​​将由linux内核调度程序处理. (37认同)
  • 注意对于Mac/Windows用户:docker可用的CPU受运行docker的主机的限制,在Mac/Windows上是在localhost OS中运行的虚拟机.要使更多核心可用于docker容器,请确保主机VM具有足够的核心.示例:`docker-machine create --driver virtualbox --virtualbox-cpu-count 4 fourcpu`.然后,容器可以访问4个CPU,这可以通过`docker run <image name> nproc`进行验证,它应该打印"4". (12认同)
  • 请问这个文件在哪里 (2认同)

Dra*_*Tux 6

可能是最新(少数)版本的内容发生了变化.现在你可以使用以下参数限制你的docker容器docker run:新docker版本中当前答案的等价物是 docker run ubuntu /bin/echo 'Hello world --cpuset-cpus="0-3" 但是,这会将docker进程限制为这些CPU,但是(如果我错了请纠正我)其他容器也可以请求同一套.一种可能更好的方法是使用CPU份额.

有关更多信息,请参阅https://docs.docker.com/engine/reference/run/