首页主机资讯centos上docker资源限制设置

centos上docker资源限制设置

时间2025-10-17 21:31:03发布访客分类主机资讯浏览1423
导读:CentOS上Docker资源限制设置方法 1. 使用docker run命令直接限制(单容器快速配置) docker run命令是最基础的容器资源限制方式,适用于临时或单容器场景,支持CPU、内存、磁盘I/O、网络带宽等多种资源类型的限制...

CentOS上Docker资源限制设置方法

1. 使用docker run命令直接限制(单容器快速配置)

docker run命令是最基础的容器资源限制方式,适用于临时或单容器场景,支持CPU、内存、磁盘I/O、网络带宽等多种资源类型的限制。

  • CPU限制

    • --cpus=< 数值> :指定容器可使用的CPU核心数(如--cpus=2表示允许使用2个完整核心;--cpus=0.5表示使用半个核心)。
    • --cpuset-cpus=< 核心编号> :限制容器只能使用指定的CPU核心(如--cpuset-cpus=0,2表示仅使用宿主机的第0和第2个核心)。
      示例:docker run -it --cpus=2 --cpuset-cpus=0,2 centos:latest /bin/bash
  • 内存限制

    • -m/--memory=< 大小> :设置容器最大可使用的内存量(如-m=512m表示512MB;-m=2g表示2GB)。
    • --memory-swap=< 大小> :设置容器可使用的内存与交换空间的总和(如--memory=512m --memory-swap=1g表示内存512MB+交换空间512MB,总和1GB)。
      示例:docker run -it -m=512m --memory-swap=1g centos:latest /bin/bash
  • 磁盘I/O限制

    • --blkio-weight=< 权重> :设置容器块设备I/O的相对权重(范围1-10000,默认500,权重越高,I/O优先级越高)。
    • --device-read-bps=< 设备路径:速率> /--device-write-bps=< 设备路径:速率> :限制容器对指定设备的读/写速率(如--device-read-bps=/dev/sda:1mb表示限制从/dev/sda读取速率为1MB/s)。
      示例:docker run -it --blkio-weight=800 --device-read-bps=/dev/sda:1mb centos:latest /bin/bash
  • 网络带宽限制
    Docker本身不直接支持网络带宽限制,但可通过tc(Traffic Control)工具或第三方网络驱动实现。例如,使用tc限制eth0接口的出口带宽为1Mbps:

    tc qdisc add dev eth0 root handle 1: htb default 10
    tc class add dev eth0 parent 1: classid 1:10 htb rate 1mbit
    ```。  
    
    
  • 进程数限制
    使用--pids-limit=< 数值> 限制容器内可创建的最大进程数(如--pids-limit=100表示最多100个进程)。
    示例:docker run -it --pids-limit=100 centos:latest /bin/bash

2. 使用Docker Compose配置资源限制(多容器管理)

若使用Docker Compose管理多个容器,可在docker-compose.yml文件的deploy.resources字段中定义资源限制,支持reservations(预留资源)和limits(最大限制)两种类型。

示例配置(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

3. 使用cgroups进行底层细粒度控制(高级用户)

Docker底层依赖Linux cgroups(控制组)实现资源限制,可通过直接操作cgroups文件系统调整资源。需确保Docker使用systemd作为cgroup driver(默认配置)。

  • 查看cgroups配置
    容器ID可通过docker ps获取,cgroups路径为/sys/fs/cgroup/< 资源类型> /docker/< 容器ID> /
    示例:查看容器内存限制文件:cat /sys/fs/cgroup/memory/docker/< 容器ID> /memory.limit_in_bytes

  • 修改cgroups配置

    • CPU配额:通过cpu.cfs_quota_us(配额)和cpu.cfs_period_us(周期,默认100000μs)设置。例如,限制容器每周期最多使用50ms CPU时间(即0.5个核心):
      mkdir /sys/fs/cgroup/cpu/my_cgroup
      echo 50000 >
           /sys/fs/cgroup/cpu/my_cgroup/cpu.cfs_quota_us  # 50ms
      echo 100000 >
           /sys/fs/cgroup/cpu/my_cgroup/cpu.cfs_period_us # 100ms
      echo <
          容器PID>
           >
           /sys/fs/cgroup/cpu/my_cgroup/tasks  # 将容器进程加入cgroup
      
    • 内存限制:修改memory.limit_in_bytes文件(单位字节)。例如,限制容器内存为512MB:
      echo 536870912 >
           /sys/fs/cgroup/memory/docker/<
          容器ID>
      /memory.limit_in_bytes
      ```。  
      
      
      

4. 修改Docker Daemon全局配置(默认限制)

若需为所有容器设置默认资源限制,可修改Docker守护进程的配置文件/etc/docker/daemon.json

示例配置(限制默认CPU份额、内存交换):

{

  "default-ulimits": {

    "nofile": {
  # 文件描述符限制
      "Name": "nofile",
      "Hard": 65535,
      "Soft": 65535
    }
,
    "nproc": {
  # 进程数限制
      "Name": "nproc",
      "Hard": 65535,
      "Soft": 65535
    }

  }
,
  "exec-opts": ["native.cgroupdriver=systemd"],  # 使用systemd作为cgroup driver
  "log-driver": "json-file",
  "log-opts": {

    "max-size": "100m"  # 日志文件大小限制
  }

}
    

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

注意事项

  • 资源限制需在容器启动前设置,运行中的容器无法直接修改(需通过docker update命令部分调整,如CPU、内存限制)。
  • 生产环境中建议使用Docker ComposeDocker Swarm管理资源,便于统一监控和维护。
  • 磁盘I/O和网络带宽限制需根据宿主机硬件配置调整,避免过度限制导致容器无法正常运行。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: centos上docker资源限制设置
本文地址: https://pptw.com/jishu/729410.html
docker启动失败centos怎么办 centos gitlab如何迁移数据

游客 回复需填写必要信息