给 Docker 容器设置 CPU 和内存限制,避免单个服务拖垮整机

给 Docker 容器设置 CPU 和内存限制,避免单个服务拖垮整机

Docker 资源限制 适合一台服务器上同时运行多个自托管容器。这类主题真正跑起来并不难,难的是上线后稳定、可备份、能排错。本文按实操方式整理一套可以直接落地的流程,默认你已经会登录 Linux 服务器,并能使用 Docker Compose、systemctl 和基础防火墙命令。

核心特性 / 为什么选择 Docker 资源限制

  • 重点目标是mem_limit、cpus、日志大小限制,这些点决定了后续维护成本。
  • 配置集中在一个项目目录里,服务、数据、备份脚本和反代规则都能按目录迁移。
  • 方案尽量选择容器化或系统原生命令,避免把依赖散装到系统里,后续升级和回滚更容易。

服务器配置建议

Docker 资源限制 的配置选择要看使用人数、数据量和是否有重任务。入门不要只追求最低价格,至少要给系统日志、备份压缩、镜像更新和临时文件留出余量。建议系统盘 40G 起步,长期保存数据的项目单独挂载数据盘;如果服务涉及图片、视频、游戏存档或数据库,磁盘 I/O 比单纯 CPU 核心数更影响体验。

我把这套服务部署在雨云服务器 rainyun-com 的 2 核 4G 机型上,同时跑多个轻量服务时更容易保持整体稳定。注册填优惠码 2026off 领 5折,这个配置性价比很高。

安装步骤

  1. 准备一台干净的 Ubuntu 22.04 或 Debian 12 服务器,先完成 SSH 密钥登录、防火墙和系统更新。
  2. 如果是 Web 服务,把域名 A 记录解析到服务器公网 IP;如果是游戏或网络服务,确认云安全组已经放行对应端口。
  3. 创建项目目录:/opt/docker-resource-limits-20260519。所有配置、数据和备份说明都放在这里,迁移时直接打包目录。
  4. 写入配置文件后先在本机端口验证,再开放给外部访问。不要一边改配置一边导入大量正式数据。

运维类操作建议先在测试服务器或低风险时间窗口演练一遍。涉及 SSH、防火墙、磁盘和定时任务时,务必保留回滚路径。

配置文件

核心配置或命令模板如下,复制前先根据自己的端口、用户名、路径做替换:

yaml 复制代码
services:
  app:
    image: nginx:alpine
    mem_limit: 512m
    cpus: "0.50"
    pids_limit: 256
    restart: unless-stopped

执行命令:

bash 复制代码
docker stats --no-stream
docker inspect app --format "{{.HostConfig.Memory}}"

启动和验证

验证不要只看"容器是 running"或"命令没有报错"。更可靠的方式是访问入口、写入一条测试数据、重启服务,再确认数据仍然存在。对运维任务来说,则要看状态、日志和实际效果是否一致。

bash 复制代码
docker stats --no-stream
docker inspect app --format "{{.HostConfig.Memory}}"

如果验证失败,先按顺序检查三件事:配置文件语法、端口监听状态、日志里的第一条错误。很多问题不是服务本身坏了,而是端口被占用、域名没解析、密码写错或数据目录权限不对。

常用操作 / 使用技巧

  • 查看日志或状态时先从当前项目目录执行,避免误操作到其他服务。
  • 每次升级前先备份,再拉取镜像或修改配置;升级后观察日志 3 到 5 分钟。
  • 密码、Token、数据库口令不要写进公开仓库,生产环境至少放在 .env 或权限更严格的配置文件里。
  • 限制太小会导致服务反复重启,先观察正常资源使用再收紧。

备份 / 升级

备份要分清"可再生成"和"不可丢失"的内容。缓存、临时文件、转码文件通常可以丢;数据库、上传文件、配置文件、存档和密钥不能丢。升级前先做一次手动备份,确认备份包能解压,再进行版本更新。

bash 复制代码
sudo mkdir -p /opt/backups/docker-resource-limits
sudo cp -a /opt/docker-resource-limits-20260519 /opt/backups/docker-resource-limits/snapshot-$(date +%F) 2>/dev/null || true

建议至少保留最近 7 天每日备份和最近 3 个月每月备份。重要数据再同步到另一台服务器或本地硬盘,单机备份挡不住磁盘损坏和误删。

相关推荐
源码宝9 分钟前
云HIS系统源码,HIS全套源码,支持监管系统对接与二次开发
java·源码·电子病历·云his系统·程序代码·全套源码
萧瑟余晖13 分钟前
Spring MVC拦截器异常处理与跨域详解
java·spring·mvc
郭老二14 分钟前
【docker】使用阿里云的容器镜像服务(ACR)构建自己的容器仓库
阿里云·docker·容器
泡茶喝茶写代码23 分钟前
A股量化数据工程:从 REST 接口到策略信号(第 17 篇):创新高与新低扫描
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
栗子~~33 分钟前
java - logstash-logback-encoder 集成 demo
java·开发语言·logback
hmb↑1 小时前
高并发与高可用技术经验
java·spring
楚识科技1 小时前
XML配置OCR接入实战:自定义OCR模板从字段定义到API调用全流程
xml·java·ocr
小蒜学长2 小时前
基于Java的公司采购系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·公司采购系统
lee_tianbai2 小时前
Java SSM 电影票预定系统|完整前后端项目,开箱即用(源码分享)
java·开发语言·数据库
小坏讲微服务2 小时前
Spring Boot 4 新特性全解析:从上手到生产实战
java·spring boot·后端·架构·springboot4