温馨提示×

Ubuntu Docker容器资源限制怎么设置

小樊
42
2025-12-28 05:23:52
栏目: 智能运维

Ubuntu Docker容器资源限制实用指南

一 快速上手 CPU与内存

  • 限制最多使用1.5个CPU核心:docker run --rm --cpus=1.5 ubuntu:latest
  • 限制最多使用2个CPU核心:docker run --rm --cpus=2 ubuntu:latest
  • 限制内存最多512MB:docker run --rm -m 512m ubuntu:latest
  • 同时限制CPU与内存:docker run --rm --cpus=1.0 -m 512m ubuntu:latest
  • 说明:–cpus支持小数;-m设置硬上限,超出可能触发OOM Killer

二 CPU细粒度控制

  • 设置CPU相对权重(默认1024):docker run --rm --cpu-shares=512 ubuntu:latest(仅在CPU紧张时生效)
  • 精确控制CPU时间:docker run --rm --cpu-period=100000 --cpu-quota=50000 ubuntu:latest(每100ms最多用50ms,即50%)
  • 绑定到指定核心(如0,1):docker run --rm --cpuset-cpus=“0,1” ubuntu:latest
  • 组合示例(绑定核心0并限制为0.5核):docker run --rm --cpuset-cpus=“0” --cpus=0.5 ubuntu:latest。

三 内存与交换分区

  • 仅限制内存为512MB(默认无swap):docker run --rm -m 512m ubuntu:latest
  • 内存512MB + 交换512MB(总计1GB):docker run --rm -m 512m --memory-swap=1g ubuntu:latest
  • 取消交换限制(仅当设置了-m):docker run --rm -m 300M --memory-swap=-1 ubuntu:latest
  • 内存软预留(压力时回收):docker run --rm -m 500M --memory-reservation=200M ubuntu:latest
  • 限制内核内存(不可换出,需小于-m):docker run --rm -m 500M --kernel-memory=50M ubuntu:latest。

四 磁盘IO与网络带宽

  • 限制块设备写入速度为1MB/s(对/dev/sda):docker run --rm --device-write-bps=/dev/sda:1mb ubuntu:latest
  • 限制块设备读取IOPS为1000:docker run --rm --device-read-iops=/dev/sda:1000 ubuntu:latest
  • 限制块I/O权重(相对优先级,默认500):docker run --rm --blkio-weight=800 ubuntu:latest
  • 网络带宽限制(示例将容器出方向限速10Mbps):
    • 获取容器PID:pid=$(docker inspect -f ‘{{.State.Pid}}’ <容器名>)
    • 进入网络命名空间并限速:nsenter -t $pid -n tc qdisc add dev eth0 root tbf rate 10mbit latency 50ms burst 1540

五 持久化与动态调整及验证

  • Docker Compose(示例):
    • version: ‘3.7
    • services:
      • web:
        • image: nginx:latest
        • deploy:
          • resources:
            • limits:
              • cpus: ‘0.5
              • memory: 512M
            • reservations:
              • cpus: ‘0.25
              • memory: 256M
  • 动态修改运行中容器(无需重启):docker update -m 1g --cpu-shares=2048 <容器名>
  • 全局默认限制(/etc/docker/daemon.json,重启生效):
    • {
      • “default-ulimits”: { “nofile”: { “Name”: “nofile”, “Hard”: 65536, “Soft”: 65536 } },
      • “exec-opts”: [“native.cgroupdriver=systemd”]
      • }
  • 验证与监控:
    • 查看实时资源:docker stats <容器名>
    • 查看配置:docker inspect <容器名> | grep -A 10 “HostConfig”
  • 提示:部分参数(如–cpus、–memory)需在创建容器时指定;–cpu-shares为相对权重,仅在竞争时体现。

0