Skip to content

资源限制

Docker 使用 Linux Cgroups 和 Namespaces 来限制和隔离容器资源。

CPU 限制

限制 CPU 使用率

sh
# 限制使用 1 个 CPU 核心
docker run -d --cpus="1.0" nginx

# 限制使用 0.5 个 CPU 核心
docker run -d --cpus="0.5" nginx

指定 CPU 核心

sh
# 使用 CPU 0 和 1
docker run -d --cpuset-cpus="0,1" nginx

# 使用 CPU 0-3
docker run -d --cpuset-cpus="0-3" nginx

CPU 优先级

sh
# 设置 CPU 优先级(0-1024,默认 1024)
docker run -d --cpu-shares=512 nginx

内存限制

限制内存使用

sh
# 限制内存为 512MB
docker run -d -m 512m nginx

# 限制内存和交换空间
docker run -d -m 512m --memory-swap=1g nginx

OOM Killer

当容器内存超限时,OOM Killer 会终止容器进程。

sh
# 禁用 OOM Killer(不推荐)
docker run -d -m 512m --oom-kill-disable nginx

I/O 限制

限制磁盘 I/O

sh
# 限制读写速度(MB/s)
docker run -d \
  --device-read-bps /dev/sda:1mb \
  --device-write-bps /dev/sda:1mb \
  nginx

限制 IOPS

sh
# 限制 IOPS
docker run -d \
  --device-read-iops /dev/sda:100 \
  --device-write-iops /dev/sda:100 \
  nginx

Docker Compose 配置

yaml
version: '3.8'

services:
  app:
    image: nginx
    deploy:
      resources:
        limits:
          cpus: '1.0'
          memory: 512M
        reservations:
          cpus: '0.5'
          memory: 256M

注意

deploy.resources 仅在 Compose V3 和 Docker Swarm 模式下生效。单机环境使用 --cpus-m 参数。

监控资源使用

sh
# 实时查看容器资源使用
docker stats

# 查看特定容器
docker stats container-name

# 只显示一次
docker stats --no-stream

最佳实践

  1. 设置合理的资源限制 - 防止单个容器占用过多资源
  2. 监控资源使用 - 定期检查容器资源使用情况
  3. 预留资源 - 为系统和其他容器预留资源
  4. 测试资源限制 - 确保应用在限制下正常运行

BSFC Tech Pro Tip

生产环境必须设置资源限制,防止资源耗尽导致系统不稳定。


由 BSFC Tech 提供技术支持