centos

Docker在CentOS上的资源限制如何设置

小樊
43
2025-10-06 22:23:56
栏目: 智能运维

Docker在CentOS上的资源限制设置方法

在CentOS系统中,Docker容器的资源限制主要通过命令行参数Docker Composecgroups配置Daemon全局配置等方式实现,覆盖CPU、内存、磁盘I/O、网络带宽等核心资源维度,避免容器过度占用宿主机资源导致系统不稳定。

一、基础资源限制(通过docker run命令)

1. CPU资源限制

2. 内存资源限制

3. 磁盘I/O限制

4. 网络带宽限制

Docker原生不直接支持网络带宽限制,但可通过**–device-read-bps**/–device-write-bps参数限制容器对特定网络设备的读写速度(需结合网络模式使用)。
示例:docker run -it --device-read-bps=eth0:1mb --device-write-bps=eth0:1mb centos:latest /bin/bash(限制eth0网卡的读写带宽为1MB/s)。

二、使用Docker Compose设置资源限制

通过docker-compose.yml文件可批量管理容器的资源限制,适用于生产环境的多容器部署。示例如下:

version: '3'
services:
  web:
    image: nginx:latest
    deploy:
      resources:
        reservations:  # 最低资源预留(系统保证)
          cpus: '0.5'       # 至少0.5个CPU核心
          memory: 256M      # 至少256MB内存
        limits:           # 最大资源限制(容器不能超过)
          cpus: '1'         # 最多1个CPU核心
          memory: 512M      # 最多512MB内存

使用docker-compose up -d启动服务后,Compose会自动应用上述资源限制。

三、通过cgroups配置细粒度控制

Docker底层依赖Linux cgroups(控制组)实现资源隔离,可通过直接操作cgroups文件系统进行更精细的调整(需root权限)。

1. 查看cgroups路径

容器启动后,Docker会自动在/sys/fs/cgroup/下创建对应的cgroup目录(如cpu/docker/<容器ID>memory/docker/<容器ID>)。
示例:ls /sys/fs/cgroup/cpu/docker/(查看所有容器的CPU cgroup路径)。

2. 修改CPU限制

3. 修改内存限制

修改后立即生效,但容器重启后会恢复默认值,需通过脚本或自动化工具持久化配置。

四、通过Docker Daemon全局配置

若需为所有容器设置默认资源限制,可修改Docker守护进程的配置文件/etc/docker/daemon.json(若文件不存在则新建),添加以下内容:

{
  "default-ulimits": {
    "memlock": {  // 限制内存锁定大小(防止容器锁住过多内存)
      "Name": "memlock",
      "Hard": -1,  // 硬限制(-1表示无限制)
      "Soft": -1   // 软限制(-1表示无限制)
    },
    "nproc": {    // 限制进程数
      "Name": "nproc",
      "Hard": 65535,
      "Soft": 65535
    },
    "nofile": {   // 限制文件描述符数量
      "Name": "nofile",
      "Hard": 65535,
      "Soft": 65535
    }
  },
  "exec-opts": ["native.cgroupdriver=systemd"]  // 使用systemd作为cgroup驱动(推荐)
}

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

sudo systemctl restart docker

注意default-ulimits设置的限制会被docker run命令中的参数覆盖。

注意事项

  1. 资源限制的有效性:所有资源限制参数(如--cpus--memory)需在创建容器时指定,容器运行后无法修改(需删除重建)。
  2. 生产环境建议:优先使用Docker Compose或Kubernetes管理资源限制,便于批量配置和动态调整;同时结合docker stats命令实时监控容器资源使用情况(如docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}")。
  3. 避免过度限制:资源限制过严可能导致容器无法正常运行(如内存限制过低触发频繁OOM),需根据应用实际需求调整。

0
看了该问题的人还看了