资源限制至关重要,因为它们有助于避免一个容器消耗过多资源,导致其他应用程序资源匮乏并拖慢整个主机的速度。特别是在生产环境中,多个容器可能在一台机器上运行,配置限制可确保每个服务都能获得公平的资源份额,而不会占用其他服务。
在 Docker 中,设置容器的资源限制对于维护稳定、响应迅速的环境至关重要。Docker 容器虽然高效,但如果不加以控制,可能会占用大量资源,可能会独占 CPU、内存或 I/O 带宽,从而导致主机出现性能问题。
本指南深入探讨了控制这些限制的实用策略,解释了如何以满足单个容器的需求和系统整体稳定性的方式限制内存、CPU、I/O 甚至网络资源。
您会发现,适当的限制不仅可以保护其他应用程序,而且还可以更轻松地预测和管理您的资源使用情况。
当您需要管理共享环境或防止未经测试或突发的应用程序过度使用系统资源时,资源限制至关重要。例如,内存限制 ( --memory
) 有助于防止内存不足 (OOM) 错误,而 CPU 份额 ( --cpu-shares
) 可确保高优先级容器保持响应能力。
选择正确的容器限制需要平衡资源以实现高可用性和性能效率。配置错误的限制可能会导致利用率不足(容器受到不必要的限制)或过度使用,从而造成瓶颈。找到适合您特定工作负载的正确配置需要进行测试和调整,尤其是在容器需求发生变化时。
在本指南中,我将介绍基础知识并深入介绍内存、CPU、I/O 和网络限制配置,同时提供实际示例。您将掌握一些策略,可以自信地设置适合您基础设施需求的资源限制,并帮助您在 Docker 环境中保持稳定性、效率和控制力。
Docker 资源限制的关键组件
Docker 资源限制允许开发人员定义和控制容器可以使用多少 CPU、内存和其他系统资源。配置这些限制的主要组件如下:
1. 内存限制
--memory (-m)
:设置内存的硬限制。此值可防止容器超出指定的内存量(例如-m 512m
512 MB)。--memory-reservation
:设置软限制作为基准。当主机有足够的可用内存时,容器可能会超过此限制,但在主机负载过大时会受到限制。--memory-swap
:控制容器的交换内存,通常设置为大于的值--memory
以防止交换耗尽。将其设置为与禁用交换相同的值--memory
。
2. CPU 限制
--cpus
:将容器限制为特定分数或整数的 CPU。例如,--cpus=1.5
将容器限制为 1.5 个 CPU。此标志非常适合在不定义严格配额的情况下限制 CPU 突发。--cpu-shares
:定义在存在 CPU 争用时优先考虑容器的相对 CPU 权重。默认值为1024
,但增加该值可使某个容器相对于其他容器获得更多的 CPU 时间(例如--cpu-shares=2048
)。--cpu-quota
和--cpu-period
:通过设置基于时间的配额来强制执行精确的 CPU 限制。例如,每 100 毫秒--cpu-period=100000
将--cpu-quota=50000
容器限制为 CPU 的 50%。
3. I/O 限制
--device-read-bps