ubuntu

Ubuntu Docker容器资源限制如何设置

小樊
69
2025-09-18 20:11:05
栏目: 智能运维

Ubuntu下Docker容器资源限制设置方法

在Ubuntu系统中,可以通过命令行参数Docker ComposeDaemon配置文件等方式设置Docker容器的资源限制(包括CPU、内存、磁盘I/O等),以下是具体操作:

一、CPU资源限制

CPU限制用于控制容器对宿主机CPU资源的占用,常用参数如下:

二、内存资源限制

内存限制用于防止容器过度消耗宿主机内存,常用参数如下:

三、磁盘I/O资源限制

通过--device-read-bps(读取速率)、--device-write-bps(写入速率)参数限制容器对指定设备的I/O速度(单位:字节/秒,如1mb=1MB/s)。例如,限制容器对/dev/sda的写入速率为30MB/s:

docker run --device-write-bps=/dev/sda:30MB ubuntu:latest /bin/bash

四、网络带宽限制

Docker原生不直接支持网络带宽限制,但可通过cgroups工具(如tc)实现。例如,使用tc限制容器网络带宽(需提前安装iproute2包):

# 创建队列规则
tc qdisc add dev eth0 root handle 1: htb
# 添加子类并设置带宽限制(如100Mbps)
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit
# 将容器流量关联到子类(需获取容器PID)
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst <容器IP> flowid 1:1

五、通过Docker Compose设置资源限制

若使用Docker Compose管理容器,可在docker-compose.yml文件的deploy.resources字段中配置资源限制(适用于Swarm模式)。例如:

version: '3'
services:
  myservice:
    image: ubuntu:latest
    deploy:
      resources:
        limits:
          cpus: '0.5'       # 限制CPU为0.5核
          memory: 512M      # 限制内存为512MB
        reservations:
          cpus: '0.25'      # 预留0.25核CPU
          memory: 256M      # 预留256MB内存

部署时使用docker stack deploy -c docker-compose.yml <stack_name>命令。

六、通过Daemon配置文件设置默认限制

若需为所有容器设置默认资源限制,可修改Docker Daemon配置文件(/etc/docker/daemon.json),添加以下内容:

{
  "default-ulimits": {
    "nofile": {
      "Name": "nofile",
      "Hard": 65536,
      "Soft": 65536
    }
  },
  "exec-opts": ["native.cgroupdriver=systemd"]
}

修改后需重启Docker服务使配置生效:

sudo systemctl restart docker

该配置可设置默认文件描述符限制(如nofile),避免容器占用过多文件句柄。

七、验证资源限制

以上方法可根据实际需求组合使用,例如同时限制CPU、内存和磁盘I/O,确保容器运行稳定且不影响宿主机及其他容器。

0
看了该问题的人还看了