温馨提示×

ubuntu上docker容器的资源限制

小樊
72
2025-08-09 11:49:47
栏目: 智能运维

在Ubuntu上可通过以下方式限制Docker容器资源:

一、命令行参数(docker run)

  • CPU限制
    • --cpus <数值>:限制CPU核心数(如--cpus 1.5表示1.5个核心)。
    • --cpu-shares <权重>:设置CPU资源分配权重(默认1024,数值越大优先级越高)。
    • --cpuset-cpus <核心列表>:绑定容器到指定CPU核心(如--cpuset-cpus 0,2)。
  • 内存限制
    • --memory <大小>(或-m):设置内存硬限制(如-m 512m)。
    • --memory-swap <大小>:设置内存+交换空间总和(如--memory-swap 1g)。
    • --memory-reservation <大小>:设置内存软限制(系统压力大时生效,需小于硬限制)。
  • 磁盘I/O限制
    • --device-write-bps <设备路径:速率>:限制写入速度(如--device-write-bps /dev/sda:30MB)。
    • --blkio-weight <权重>:设置磁盘I/O权重(10-1000,默认100)。

二、Docker Compose配置

docker-compose.yml中通过deploy.resources设置:

services:  
  app:  
    image: ubuntu  
    deploy:  
      resources:  
        limits:  
          cpus: '1'  
          memory: 512M  
        reservations:  
          cpus: '0.5'  
          memory: 256M  

limits为硬限制,reservations为软预留)。

三、系统级配置

  • 修改内核参数:通过/etc/sysctl.conf调整系统资源限制(如vm.swappiness控制交换空间使用倾向)。
  • cgroups直接操作:通过/sys/fs/cgroup/路径手动修改容器的cgroup参数(需深入理解cgroups机制)。

注意事项

  • 部分参数(如--cpus)需宿主机内核支持,可通过docker info检查。
  • 资源限制需在容器启动前设置,运行中修改需使用docker update命令。
  • 生产环境中建议结合监控工具(如docker statscAdvisor)动态调整资源分配。

参考来源:[1,2,3,4,5,6,7,8,9,10]

0