Ubuntu下Docker资源限制设置方法
在Ubuntu系统中,可以通过多种方式为Docker容器设置资源限制(包括CPU、内存、磁盘I/O等),确保容器不会过度消耗宿主机资源,保障系统稳定性。以下是具体设置方式:
1. 通过docker run命令直接设置(临时生效)
这是最常用的临时限制方式,适用于单次启动容器的场景。
- CPU限制:
--cpus=:限制容器可使用的CPU核心数(如--cpus=2表示最多使用2个核心);--cpu-shares=:设置CPU相对权重(默认1024,值越大优先级越高,如--cpu-shares=512表示权重为默认的一半);--cpuset-cpus=":绑定容器到指定CPU核心(如" --cpuset-cpus="0,2"表示仅使用第0和第2核心)。
- 内存限制:
-m/--memory=:限制容器最大物理内存使用量(如-m 512m表示最多使用512MB内存);--memory-swap=:限制内存+交换空间(Swap)的总和(如-m 512m --memory-swap=1g表示内存512MB+Swap 512MB;若设为-1则Swap无限制)。
- 磁盘I/O限制:
--device-read-bps=:限制设备读取速率(如: --device-read-bps=/dev/sda:1mb表示/dev/sda读取速率不超过1MB/s);--device-write-bps=:限制设备写入速率(如: --device-write-bps=/dev/sda:1mb表示/dev/sda写入速率不超过1MB/s);--blkio-weight=:设置块设备I/O权重(默认100,范围10-1000,值越大优先级越高)。
- 网络限制:
--network=:指定网络模式(如--network=bridge为默认桥接模式,--network=host共享宿主机网络以减少开销);- 结合
tc(Traffic Control)工具可实现更细粒度的网络带宽限制(需手动配置)。
示例命令:
docker run -it --cpus=2 -m 512m --memory-swap=1g --device-read-bps=/dev/sda:1mb ubuntu:latest /bin/bash
2. 使用Docker Compose配置(适用于多容器管理)
通过docker-compose.yml文件定义资源限制,便于批量管理和版本控制。
在services模块下添加deploy.resources字段,支持reservations(最低保障)和limits(最高限制):
version: '3'
services:
web:
image: nginx
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. 修改Docker Daemon配置(默认限制)
若需要为所有容器设置默认资源限制,可修改Docker守护进程的配置文件/etc/docker/daemon.json(若文件不存在则新建):
{
"exec-opts": ["native.cgroupdriver=systemd"], // 推荐使用systemd作为cgroup驱动
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 65536,
"Soft": 65536
},
"memlock": {
"Name": "memlock",
"Hard": -1,
"Soft": -1
}
},
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}
修改后重启Docker服务使配置生效:
sudo systemctl restart docker
4. 通过cgroups直接操作(高级精细控制)
Docker底层依赖Linux cgroups实现资源限制,可通过直接操作cgroups文件系统实现更细粒度的调整(如修改已运行容器的限制)。
- 查看容器cgroup路径:
docker inspect --format='{{.HostConfig.CgroupParent}}' - 限制内存使用:
进入容器对应的cgroup目录(如/sys/fs/cgroup/memory/docker/),修改memory.limit_in_bytes文件:echo 536870912 > /sys/fs/cgroup/memory/docker//memory.limit_in_bytes # 限制为512MB(512*1024*1024) - 限制CPU使用:
进入容器对应的cgroup目录(如/sys/fs/cgroup/cpu/docker/),修改cpu.cfs_quota_us和cpu.cfs_period_us文件(quota/quota_period即为CPU配额比例,如200000/100000表示50%的CPU时间):echo 200000 > /sys/fs/cgroup/cpu/docker//cpu.cfs_quota_us echo 100000 > /sys/fs/cgroup/cpu/docker/ /cpu.cfs_period_us
注意事项
- 资源限制需在容器启动前设置:除cgroups直接操作外,其他方式无法修改已运行容器的资源限制;
- 合理分配资源:避免过度限制导致容器无法正常运行(如内存限制过小可能导致OOM Killer终止容器);
- 监控资源使用:使用
docker stats命令实时查看容器资源占用情况,根据实际需求调整限制参数; - 生产环境建议:结合Kubernetes等编排工具,实现动态资源调度和更完善的限制策略。
以上就是关于“Ubuntu Docker资源限制怎么设置”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm