Docker服务器该配多少CPU和内存,先看容器数量和负载类型
Docker 本身几乎不占什么资源,一个空闲的 Docker 守护进程内存通常只有几十 MB。
所以“Docker 服务器推荐什么配置”这个问题,真正要算的是你打算在容器里跑什么业务、同时跑多少个容器、有没有数据库和构建任务。
结论先说:个人测试和小型站点 2 核 2G 到 2 核 4G 够用;
跑多个容器加数据库的生产环境建议 4 核 8G 起步;
磁盘和内存余量比 CPU 核数更值得关注。
先看容器里跑什么,再决定 CPU 和内存
判断配置时,把容器分成三类看:
- 基础服务类:Nginx、Redis、小型数据库、监控代理。这类容器 CPU 占用低,但数据库对内存敏感,MySQL 或 PostgreSQL 建议单独给 2G 以上内存。
- 应用服务类:Java、Node.js、Python 后端。Java 容器启动后堆内存容易吃到 1G 以上,Node.js 和 Python 相对轻,但并发高时也会上涨。
- 一次性任务类:
docker build构建镜像、定时脚本、数据导入。构建过程会短时间吃满 CPU,如果和生产容器挤在同一台机器上,建议至少留出 1 到 2 核余量。
一个常见的起步组合是:1 核 2G 只适合单容器测试;
2 核 4G 适合 Nginx 加一个应用容器;
4 核 8G 适合应用、数据库、缓存和反向代理同时运行。
CPU 核数不够时表现为响应变慢,内存不够时则可能直接触发 OOM 杀掉容器,后者更危险。
磁盘怎么规划,别让镜像把系统盘塞满
Docker 默认把镜像、容器层和数据卷放在 /var/lib/docker,位于系统盘。
长期运行后,旧镜像和停止的容器会持续累积,系统盘写满后容器会启动失败。
选购时建议系统盘不低于 40G,数据盘单独挂载并做好目录规划。
如果云厂商支持,可以把 Docker 数据目录迁移到数据盘:
sudo systemctl stop docker
sudo mkdir -p /data/docker
sudo rsync -a /var/lib/docker/ /data/docker/
然后编辑 /etc/docker/daemon.json:
{
"data-root": "/data/docker"
}
执行 sudo systemctl start docker 后,用 docker info | grep "Docker Root Dir" 确认路径已生效。
迁移前务必停止所有容器并确认新目录空间足够。
日常可以定期清理无用资源,但不要在生产环境随手执行全量清理:
docker system df
docker image prune -a
docker system df 会列出镜像、容器、卷和构建缓存各占多少空间,先看再删。
内存限制要主动设置,避免单个容器拖垮整机
Docker 默认不限制容器内存,一个内存泄漏的容器可能把宿主机内存吃光,导致其他容器被系统杀掉。
建议在运行容器时显式限制:
docker run -d --name app \
--memory=1g --memory-swap=1g \
--cpus=1.5 \
your-image:latest
--memory 限制容器可用内存,--memory-swap 设为相同值表示禁用额外交换空间。
设置后可以用 docker stats 观察实际占用,再根据业务峰值调整。
如果容器内是 Java 应用,还要同步设置 JVM 堆参数,否则 JVM 可能按宿主机总内存计算堆大小,和容器限制冲突。
带宽和网络配置的取舍
容器对外提供 Web 服务时,带宽取决于访问量和内容类型。
纯接口服务对带宽要求不高,图片、下载、视频类业务才是带宽消耗大户。
选购时可以先用小带宽起步,观察监控中的出网流量峰值再升级。
端口映射方面,生产环境建议只暴露必要端口,例如只映射 80 和 443,数据库端口不要直接映射到公网,让容器通过自定义网络互相访问:
docker network create app-net
docker run -d --name db --network app-net -e MYSQL_ROOT_PASSWORD=*** mysql:8
这样应用容器可以用容器名 db 作为主机名连接数据库,不必暴露端口。
买之前和上线后的检查清单
选购阶段确认这几点:内存是否可后续升级、系统盘和数据盘能否分开、是否有快照或备份能力、带宽是否独享。
上线后按顺序验证:
- 执行
docker stats,确认各容器内存和 CPU 占用在限制范围内。 - 执行
df -h,确认/var/lib/docker所在分区剩余空间充足。 - 执行
docker ps -a,确认没有长期处于 Exited 状态的容器占着磁盘。 - 用
free -h查看宿主机剩余内存,长期低于 10% 就该考虑升配或拆分服务。
如果服务器上还要跑数据库,配置判断可以更保守一些;
如果是纯静态站点反向代理,2 核 2G 往往已经够用。
配置没有统一答案,按容器数量和内存峰值倒推,比照着参数表猜更可靠。