介绍
默认情况下,Docker 容器可以访问主机的完整 RAM 和 CPU 资源。让它们以这些默认设置运行可能会导致性能瓶颈。
如何设置Docker CPU限制?如果不限制 Docker 的内存和 CPU 使用率,Docker 可以使用所有系统资源。
在本教程中,了解如何限制 Docker 容器的内存和 CPU 使用率。
配置系统以启用限制资源
如何配置Docker资源使用?在运行资源有限的容器之前,请检查你的系统是否支持此 Docker 选项。本指南向你展示如何在 Ubuntu 中执行此操作,以及如何在需要时启用此功能。
1. 首先,运行命令:
sudo docker info
如果你收到输出WARNING: No swap limit support
,则默认情况下未启用限制资源。
2. 要添加此选项,请编辑 grub 配置文件。在你选择的文本编辑器中打开文件(我们使用的是nano):
sudo nano /etc/default/grub
3. 然后,添加以下行:
GRUB_CMDLINE_LINUX="cdgroup_enable=memory swapaccount=1"
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
应该是一个正整数,后跟后缀b、k、m或g (字节、千字节、兆字节或千兆字节的缩写)。例如,要限制具有 1 GB RAM 的容器,请添加--memory="1g"
.
例如,要运行 Ubuntu 容器的实例并将内存限制设置为 1 GB,命令是:
sudo docker run -it --memory="1g" ubuntu
设置交换到磁盘内存限制
如何配置Docker资源使用?使用该swap
选项,即使分配给容器的所有 RAM 都已用完,你也可以存储数据。它通过忽略内存限制并直接写入磁盘来做到这一点。尽管这是一个有用的功能,但它不是推荐的做法,因为它会降低性能。
如何设置Docker内存限制?要配置这个额外的 RAM 空间,请定义交换内存的总量。在执行此操作之前,你应该已经拥有--memory
非交换内存集的最大内存 ( )。交换包括非交换内存总量加上作为备份保留的交换内存量。
例如,如果你设置--memory
为1 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 运行命令。