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

centos上docker的资源限制

时间2025-10-05 02:27:03发布访客分类主机资讯浏览339
导读:在CentOS上限制Docker容器资源的主要方法 1. 使用docker run命令参数(最常用) docker run命令提供了丰富的参数,可直接在启动容器时设置资源限制,适用于临时或一次性容器的资源管控。 CPU限制: --cpu...

在CentOS上限制Docker容器资源的主要方法

1. 使用docker run命令参数(最常用)

docker run命令提供了丰富的参数,可直接在启动容器时设置资源限制,适用于临时或一次性容器的资源管控。

  • CPU限制
    • --cpus=< value> :限制容器可使用的CPU核心数(支持小数,如1.5表示1.5核)。例如,限制容器使用2核:docker run -it --cpus=2 ubuntu:latest /bin/bash
    • --cpuset-cpus="< cpu_list> ":将容器绑定到指定的CPU核心(如0,2表示仅使用第0和第2核),适用于多核环境的隔离优化。
    • --cpu-shares=< weight> :设置CPU相对权重(默认1024),当多个容器竞争CPU时,权重高的容器获得更多CPU时间(如--cpu-shares 512的容器资源占用约为--cpu-shares 1024的一半)。
  • 内存限制
    • -m/--memory=< size> :设置容器最大可用内存(如512m表示512MB、2g表示2GB),超出会触发OOM(Out of Memory) Killer终止容器。例如:docker run -it --memory=512m ubuntu:latest /bin/bash
    • --memory-swap=< size> :设置内存+交换空间的总限制(必须大于-m的值,如-m 512m --memory-swap=1g表示内存最多用512MB,交换空间最多用512MB)。
    • --memory-reservation=< size> :设置内存软限制(当容器内存使用超过该值时,Docker会尝试回收资源,但不强制终止)。
  • 磁盘I/O限制
    • --blkio-weight=< weight> :设置块设备I/O权重(范围10-1000,默认500),权重越高,磁盘I/O优先级越高(如--blkio-weight=800的容器优先级高于默认)。
    • --device-read-bps=< device> :< rate> /--device-write-bps=< device> :< rate> :限制指定设备的读/写速度(如--device-read-bps=/dev/sda:1mb表示限制/dev/sda的读取速度为1MB/s)。
  • 网络带宽限制
    • 结合--network模式(如bridge)和tc(Traffic Control)工具,或使用--device-read-bps/--device-write-bps限制网络接口的带宽(如--device-read-bps=eth0:1mb限制eth0的读取速度为1MB/s)。

2. 使用Docker Compose(适用于多容器应用)

通过docker-compose.yml文件定义资源限制,便于多容器应用的统一管理和部署(需Docker Compose版本≥3)。

  • 示例配置
    version: '3'
    services:
      web:
        image: nginx:latest
        deploy:
          resources:
            reservations:  # 最低资源保证(启动容器时分配)
              cpus: '0.5'    # 至少0.5核
              memory: 256M   # 至少256MB内存
            limits:         # 最大资源限制(运行时上限)
              cpus: '1'      # 最多1核
              memory: 512M   # 最多512MB内存
    
  • 说明reservations用于保证容器的最低资源需求(避免因宿主机资源不足导致容器无法启动),limits用于限制容器的最大资源使用(防止过度占用)。

3. 使用cgroups(底层细粒度控制)

Docker底层依赖Linux cgroups(控制组)实现资源限制,可通过直接操作cgroups文件系统进行更细粒度的调整(适用于高级用户或自动化脚本)。

  • 操作步骤
    1. 查看cgroups目录:ls /sys/fs/cgroup/(常见子目录包括cpumemoryblkio等)。
    2. 进入容器对应的cgroup目录(如/sys/fs/cgroup/cpu/docker/< container_id> )。
    3. 修改资源限制文件:
      • CPU:写入cpu.cfs_quota_us(配额,单位微秒)和cpu.cfs_period_us(周期,默认100000微秒,如echo 200000 > cpu.cfs_quota_us表示限制为2核)。
      • 内存:写入memory.limit_in_bytes(如echo 536870912 > memory.limit_in_bytes表示限制为512MB)。
    4. 将容器PID写入tasks文件:echo < container_pid> > tasks(使限制生效)。

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

通过修改Docker守护进程的配置文件/etc/docker/daemon.json,可设置全局默认资源限制(适用于所有新创建的容器)。

  • 示例配置
    {
    
      "default-ulimits": {
    
        "nofile": {
      // 文件描述符限制
          "Name": "nofile",
          "Hard": 65535,
          "Soft": 65535
        }
    ,
        "nproc": {
       // 进程数限制
          "Name": "nproc",
          "Hard": 65535,
          "Soft": 65535
        }
    
      }
    ,
      "exec-opts": ["native.cgroupdriver=systemd"],  // 推荐使用systemd作为cgroup驱动
      "log-driver": "json-file",
      "log-opts": {
    
        "max-size": "100m"  // 日志文件大小限制
      }
    
    }
        
    
  • 生效步骤:修改后重启Docker服务:sudo systemctl restart docker

注意事项

  • 资源限制需在容器启动前设置docker run参数、Compose文件或Daemon配置需在容器创建时指定,运行后无法直接修改(需重建容器)。
  • 避免过度限制:限制过严可能导致容器无法正常运行(如内存限制过低触发OOM Killer)。
  • 生产环境推荐:使用Docker Compose或Daemon配置管理资源限制,便于统一维护和扩展。

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


若转载请注明出处: centos上docker的资源限制
本文地址: https://pptw.com/jishu/720871.html
docker在centos上的日志查看 CentOS Minimal下数据库安装与配置

游客 回复需填写必要信息