CodeGym /课程 /Docker SELF /容器资源管理

容器资源管理

Docker SELF
第 12 级 , 课程 0
可用

6.1 为啥要限制容器资源

Docker 超棒,管理容器资源起来贼溜,这样可以高效分配系统性能,还能避免容器间的冲突。尤其重要的是,确保一个容器的应用不会“吃光”所有资源,导致别的服务变慢卡顿。限制 CPU 和内存这种资源用量,有助于避免系统过载,保持系统稳定性,并且确保所有应用按预期运行。这节课,我们就聊聊怎么给 CPU 和内存的使用加上限制,让系统在高负载下依然保持高效。

为啥要限制容器资源:

  1. 稳定性: 防止一个容器抢光资源,导致其他容器或者系统本身变慢卡顿。
  2. 效率: 在容器之间更好地分配资源,让系统性能用得更高效。
  3. 保护: 限制资源能避免容器意外或者故意让系统过载出问题。

6.2 限制 CPU 的使用

Docker 提供了一些方法来限制容器对 CPU 的使用。

重要! 这里的 CPU 指的是单个核心,而不是整个处理器。一个四核处理器将有 4 个 CPU

1. 限制 CPU (--cpu-shares) 的份额

参数 --cpu-shares 用于为容器设置 CPU 使用的相对优先级。默认值为 1024。这是一个相对值,意思是,设置 --cpu-shares=512 的容器将拥有比 --cpu-shares=1024 的容器少一半的优先级。

使用示例:

在这个例子中,容器 high_priority_container 在分配 CPU 时优先级高于 low_priority_container

终端

docker run -d --name low_priority_container --cpu-shares=512 nginx

docker run -d --name high_priority_container --cpu-shares=2048 nginx

2. 限制 CPU (--cpus) 的数量

参数 --cpus 设置容器可用的 CPU 数量。例如,值为 1.5 意味着容器可以使用 1.5 个 CPU

使用示例:

在此示例中,容器 limited_cpu_containerCPU 使用量不会超过 1.5 个。

终端


        docker run -d --name limited_cpu_container --cpus="1.5" nginx
    

3. 限制 CPU 使用时间 (--cpu-quota 和 --cpu-period)

参数 --cpu-quota--cpu-period 允许更精细地调节 CPU 使用。--cpu-period 设置时间间隔(单位:微秒,默认值为 100000),而 --cpu-quota 设置该时间段内的最大 CPU 使用时间。

使用示例:

在这个例子中,容器 custom_cpu_quota_container 使用的 CPU 不会超过 50%(25000/50000)。

终端


        docker run -d --name custom_cpu_quota_container --cpu-period=50000 --cpu-quota=25000 nginx

6.3 内存使用限制

内存限制可以控制容器可以使用的内存量。这个功能可以帮助避免一个容器占用所有内存,影响其他进程和容器。

1. 最大内存限制 (--memory)

参数 --memory 设置了容器可以使用的内存上限。如果容器超过这个限制,系统会终止它。

使用示例:

这个示例限制容器 limited_memory_container 使用不超过 512 MB 的内存。

Terminal

docker run -d --name limited_memory_container --memory="512m" nginx

2. 内存交换限制 (--memory-swap)

参数 --memory-swap 设置了总的内存和交换空间的上限。例如,如果 --memory 被设置为 512 MB,而 --memory-swap 被设置为 1 GB,那么容器可以使用最多 512 MB 的内存和额外 512 MB 的交换空间。

使用示例:

这个示例限制容器 swap_limited_container 使用512 MB 的内存和 512 MB 的交换空间。

Terminal

docker run -d --name swap_limited_container --memory="512m" --memory-swap="1g" nginx

3. 禁用交换空间的内存限制 (--memory-swap=-1)

如果想禁止使用交换空间,把参数 --memory-swap 设置为 -1。

使用示例:

这个示例限制容器 no_swap_container 使用 512 MB 的内存,并禁止使用交换空间。

Terminal

docker run -d --name no_swap_container --memory="512m" --memory-swap="-1" nginx

6.4 实践场景

1. 运行高优先级和低优先级任务

如果在同一台服务器上同时运行重要和次要任务,参数 --cpu-shares 可以帮助分配资源,让关键任务获得更多的 CPU

Terminal

docker run -d --name high_priority_task --cpu-shares=2048 my_high_priority_image
docker run -d --name low_priority_task --cpu-shares=512 my_low_priority_image

2. 为测试限制资源

在有限资源下测试应用可以为 CPU 和内存设置严格的限制。这有助于了解应用在此类限制下的表现。

Terminal

docker run -d --name test_container --cpus="1" --memory="256m" my_test_image

3. 防止资源耗尽

为了避免某个容器占用系统所有可用资源,可以为所有容器设置内存和 CPU 限制。

Terminal

docker run -d --name isolated_container --cpus="2" --memory="1g" my_app_image
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION