centos上docker的资源限制
导读:在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文件系统进行更细粒度的调整(适用于高级用户或自动化脚本)。
- 操作步骤:
- 查看cgroups目录:
ls /sys/fs/cgroup/
(常见子目录包括cpu
、memory
、blkio
等)。 - 进入容器对应的cgroup目录(如
/sys/fs/cgroup/cpu/docker/< container_id>
)。 - 修改资源限制文件:
- 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)。
- CPU:写入
- 将容器PID写入
tasks
文件:echo < container_pid> > tasks
(使限制生效)。
- 查看cgroups目录:
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