如何设置Docker内存和CPU使用限制?分步指南

2021年11月20日19:25:52 发表评论 1,961 次浏览

介绍

默认情况下,Docker 容器可以访问主机的完整 RAM 和 CPU 资源。让它们以这些默认设置运行可能会导致性能瓶颈。

如何设置Docker CPU限制?如果不限制 Docker 的内存和 CPU 使用率,Docker 可以使用所有系统资源。

在本教程中,了解如何限制 Docker 容器的内存和 CPU 使用率。

配置系统以启用限制资源

如何配置Docker资源使用?在运行资源有限的容器之前,请检查你的系统是否支持此 Docker 选项。本指南向你展示如何在 Ubuntu 中执行此操作,以及如何在需要时启用此功能。

1. 首先,运行命令:

sudo docker info

如果你收到输出WARNING: No swap limit support,则默认情况下未启用限制资源。

如何设置Docker内存和CPU使用限制?分步指南

2. 要添加此选项,请编辑 grub 配置文件。在你选择的文本编辑器中打开文件(我们使用的是nano):

sudo nano /etc/default/grub

3. 然后,添加以下行:

GRUB_CMDLINE_LINUX="cdgroup_enable=memory swapaccount=1"
如何设置Docker内存和CPU使用限制?分步指南

4. 保存更改并退出文件。

5. 然后,使用以下命令更新 grub 配置:

sudo update-grub

6. 最后,重新启动机器以使更改生效。

7. 通过重新运行docker info命令来验证你是否已成功启用给定的 Docker 功能。

注意:如果你还没有掌握 Docker 命令,这个Docker 命令备忘单可能会作为一个方便的参考表有用。

限制 Docker 容器内存访问

如何配置Docker资源使用?你可以为 Docker 容器设置几个 RAM 限制。其中一些包括:

  • 配置容器可以使用的最大内存量。
  • 定义 Docker 容器可以交换到磁盘的内存量。
  • 设置分配给容器的内存量的软限制。

下面,了解如何配置 Docker 内存限制。

设置最大内存访问 

如何设置Docker内存限制?要限制容器的最大内存使用量,请将--memory选项添加到docker run命令中。或者,你可以使用快捷方式-m

在命令中,指定要专用于该特定容器的内存量。

该命令应遵循以下语法:

sudo docker run -it --memory="[memory_limit]" [docker_image]

的值memory_limit 应该是一个正整数,后跟后缀bkm(字节、千字节、兆字节或千兆字节的缩写)。例如,要限制具有 1 GB RAM 的容器,请添加--memory="1g".

例如,要运行 Ubuntu 容器的实例并将内存限制设置为 1 GB,命令是:

sudo docker run -it --memory="1g" ubuntu

设置交换到磁盘内存限制

如何配置Docker资源使用?使用该swap选项,即使分配给容器的所有 RAM 都已用完,你也可以存储数据。它通过忽略内存限制并直接写入磁盘来做到这一点。尽管这是一个有用的功能,但它不是推荐的做法,因为它会降低性能。

如何设置Docker内存限制?要配置这个额外的 RAM 空间,请定义交换内存的总量。在执行此操作之前,你应该已经拥有--memory非交换内存集的最大内存 ( )。交换包括非交换内存总量加上作为备份保留的交换内存量。

例如,如果你设置--memory1 GB,如上例所示,交换内存的数量需要更多。要运行具有额外 1 GB交换内存的容器,请将交换内存设置为2 GB

运行具有有限内存和额外交换内存的容器的语法是:

sudo docker run -it --memory="[memory_limit]" --memory-swap="[memory_limit]" [docker_image]

例如,要从 Ubuntu 映像运行容器,为容器分配 1 GB 的 RAM 以使用并保留 1 GB 的 RAM 用于交换内存,请键入:

sudo docker run -it --memory="1g" --memory-swap="2g" ubuntu

注意:如果你不想使用交换内存,请提供--memory--memory-swap相同的值。

为容器内存设置软限制

如何设置Docker内存限制?限制容器的内存使用--memory本质上是设置一个无法超越的硬限制。或者,你可以设置一个软限制 ( --memory-reservation),它会在容器到达其分配内存的末尾时发出警告,但不会停止其任何服务。

如果--memory未设置限制看到,则设置软限制--memory-reservation并不会完全限制容器空间。如果你同时启用了这两个功能,则软限制始终低于最大空间容量。

例如,对于具有750 MB内存预留和1 BG最大 RAM 容量的 Ubuntu 容器,请使用以下命令:

sudo docker run -it --memory="1g" --memory-reservation="750m" ubuntu

限制 Docker 容器 CPU 使用率

如何配置Docker资源使用?就像 RAM 使用一样,Docker 容器对主机的 CPU 没有任何默认限制。为容器提供无限的 CPU 使用率可能会导致问题。

有多种方法可以定义主机上要分配给容器的 CPU 资源量。

如何设置Docker CPU限制?例如,如果你有一台带有 2 个 CPU 的主机,并且想要让容器访问其中一个,请使用选项--cpus="1.0"。运行可访问 1 个 CPU 的 Ubuntu 容器的命令是:

sudo docker run -it --cpus="1.0" ubuntu

你还可以使用该--cpu-shares选项为容器提供更大或更小的 CPU 周期比例。默认情况下,这设置为1024

要运行具有较少 CPU 份额的容器,请运行:

sudo docker run -it --cpus-shares="700" ubuntu

要找到更多限制容器 CPU 使用率的选项,请参阅Docker 的官方文档

注意:了解如何在 Linux 中检查 CPU 使用率以及如何在 Linux中检查 CPU 温度。

结论

如何配置Docker资源使用?现在你可以运行 Docker 容器,而不必担心它们相互踩踏并占用太多资源。有关更多 Docker 配置选项,请查看如何通过示例使用 Docker 运行命令。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: