Docker容器实现资源限制的多种方式(如CPU和内存)

 更新时间:2025年07月03日 17:12:31   作者:思静鱼  
在 Docker 中,可以通过设置容器运行参数,限制容器的 CPU、内存等资源使用量,从而防止某个容器占用过多资源,影响其他服务运行,本文给大家介绍了Docker容器实现资源限制的多种方式,需要的朋友可以参考下

一、内存限制(Memory)

限制最大内存使用:

docker run -m 512m --memory-swap 512m ubuntu
参数说明
-m 或 --memory设置最大可用物理内存(如 512m, 2g)
--memory-swap包含内存+交换分区(swap)的总限制
--memory-reservation软限制(仅在系统压力大时才强制限制)

推荐 --memory-swap 值与 --memory 相同,避免 swap 占用过多。

二、CPU 限制

Docker 默认不会限制 CPU,但你可以通过如下方式控制:

方法 1:限制可用 CPU 核心数

docker run --cpuset-cpus="0,1" ubuntu

表示容器只能使用第 0 和 1 核心。

方法 2:设置 CPU 份额(相对权重)

docker run --cpu-shares=512 ubuntu
  • 默认是 1024
  • 多个容器分配 CPU 份额:容器 A 是 512,容器 B 是 1024,B 获取 CPU 的概率是 A 的 2 倍

方法 3:控制 CPU 使用比例

docker run --cpus="1.5" ubuntu

表示最多使用 1.5 核心(如果宿主机是多核,可跨核调度)。

三、综合示例(限制 CPU + 内存)

docker run -d \
  --name limited_container \
  -m 512m --memory-swap=512m \
  --cpus="1.0" \
  ubuntu sleep 1000
  • 限制最大 512MB 内存
  • 限制最多 1 个 CPU 核心

四、查看资源限制

docker inspect 容器ID

查看 JSON 中的 "HostConfig""Memory""NanoCpus" 等字段。

或使用命令:

docker stats 容器名

实时查看容器的 CPU、内存使用情况。

五、推荐实践

建议说明
限制生产容器的内存和 CPU防止容器 OOM、抢占系统资源
多容器部署时使用 --cpus精细控制资源分配
--memory-swap=memory 推荐设置一致避免 swap 被滥用
使用 Kubernetes 时通过资源 Request / Limit替代 Docker 参数方式
docker stats 做定期监控或报警配合 cadvisor / Prometheus

六、进阶控制(cgroups)

Docker 本质上是使用 Linux 的 cgroups 控制组 实现资源限制的,可以通过如下命令查看:

cat /sys/fs/cgroup/memory/docker/<container_id>/memory.limit_in_bytes

若你使用 containerd / podman 等容器引擎,也会采用类似方式控制资源。

七、总结图

docker run \
  --cpus="1.5" \
  --memory="1g" \
  --memory-swap="1g" \
  your-image

限制容器最大使用 1.5 核心、1GB 内存,不允许超额。

如你需要:

  • docker-compose.yml 中配置资源限制
  • Kubernetes 中 Pod 的资源 request/limit
  • 或资源超限后的报警或自恢复机制设计

到此这篇关于Docker容器实现资源限制的多种方式(如CPU和内存)的文章就介绍到这了,更多相关Docke资源限制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • CentOS7 Nexus安装步骤详细介绍

    CentOS7 Nexus安装步骤详细介绍

    这篇文章主要介绍了CentOS7 Nexus安装步骤详细介绍的相关资料,这里对CentOS7 安装Nexus 进行了详细介绍,需要的朋友可以参考下
    2016-11-11
  • 快速安装openshift的步骤详解

    快速安装openshift的步骤详解

    今天小编就为大家分享一篇关于快速安装openshift的步骤详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Docker上传镜像至私有仓库的方法示例

    Docker上传镜像至私有仓库的方法示例

    这篇文章主要介绍了Docker上传镜像至私有仓库的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • Docker自动部署Apache Tomcat的方法

    Docker自动部署Apache Tomcat的方法

    这篇文章主要介绍了Docker自动部署Apache Tomcat的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • docker清理无用镜像的方法详解

    docker清理无用镜像的方法详解

    k8s环境运行久了,镜像会一直在电脑上,会出现磁盘空间不足,需要定期清理过期没有使用的镜像,下面小编就来和大家详细讲讲docker如何清理无用镜像吧
    2025-06-06
  • Docker 删除及清理镜像的方法

    Docker 删除及清理镜像的方法

    本文主要介绍了Docker 删除及清理镜像的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Docker中Harbor企业级镜像仓库的搭建与使用

    Docker中Harbor企业级镜像仓库的搭建与使用

    本文介绍了Harbor企业级镜像仓库的搭建与使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12
  • docker网络端口映射的实现步骤

    docker网络端口映射的实现步骤

    本文主要介绍了docker网络端口映射的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Docker网络原理及自定义网络详细解析

    Docker网络原理及自定义网络详细解析

    一般使用自定义网络,自定义网络使用network创建,创建时可以指定子网网段及网关等信息,在创建并启动容器时指定使用的网络,今天通过本文给大家介绍Docker网络原理及自定义网络的相关知识,感兴趣的朋友一起看看吧
    2021-05-05
  • 如何在Docker容器内外互相拷贝数据

    如何在Docker容器内外互相拷贝数据

    本篇文章主要介绍了如何在Docker容器内外互相拷贝数据,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12

最新评论