Docker容器资源管理

前言
在进行集群实验时,由于物理机不够用,而在一台物理机装虚拟机又会造成很大的资源开销,电脑运行缓慢。而容器则为我们提供了一种很好的解决方式。Docker也在近几年很快扩展开来,被用以微服务架构的搭建和实验。
那么,使用docker创建的容器与物理机之间的资源占用是怎样的呢?下面我们来具体说明。


1.基础概念
Docker使用cgroups归类运行在容器中的进程。这使得可以管理一组进程的资源,可想而知,这是非常宝贵的。
如果你运行一个操作系统,其使用systemd管理服务。每个进程(不仅仅是容器中的进程)都将进入一个cgroups树中,如果你运行systemd-cgls命令,可以看到:

systemd-cgls

Docker容器资源管理_第1张图片
当我们想管理资源的时候,这个方法提供了很大的灵活性,因为我们可以分别管理每个组。尽管这篇博客文章着重于容器,但同样的原则也适用于其他的进程。

systemd-cgtop

可以查看该主机上使用最多资源的容器
2.资源
CPU
docker能指定(通过运行命令的-c 开关)给一个容器分配可用的CPU,这是一个相对权重,与实际的速度无关。事实上,没有办法说一个容器只可以获得1Ghz CPU。

每一个新的容器默认有1024CPU配额。(这个还不确定怎么解释)

如果我们启动两个容器并且两个都将用100%CPU,CPU时间将在这两个容器之间平均分割,因为它们两个都有一样的CPU配额(假设没有其他进程进行的话)。

如果我们设置容器的CPU配额是512,相对于另外一个容器,它将使用一半的CPU时间。但这不意味着它仅仅能使用一半的CPU时间。如果另外一个容器(1024配额的)是空闲的 - 我们的容器将被允许使用100%CPU。这是需要注意的另外一件事。

限制仅仅当它们应该被执行的时候才会强制执行。CGroups不限制进程预先使用(比如,不允许它们更快地运行即使它们有空余资源)。相反的,它提供了它尽可能提供的以及它仅仅在必需的时候限制(比如,当太多的进程同时大量地使用CPU)。

当然,这很难说清楚(我想说的是这不可能说清楚的)多少资源应该被分配给你的进程。这实际取决于其他进程的行为以及多少配额被分配给它们。

参考https://blog.csdn.net/u010889990/article/details/44096823

你可能感兴趣的:(Docker)