对于 2核4G(2 vCPU, 4GB RAM) 的服务器,部署 Docker 时需要特别注意资源限制,避免系统因内存不足导致 OOM(Out of Memory)或 CPU 争用导致服务卡顿。以下是需要优化的关键参数和建议:
一、Docker Daemon 配置优化(/etc/docker/daemon.json)
1. 限制容器默认内存使用
{
"default-runtime": "runc",
"exec-opt": ["native.cgroupdriver=cgroupfs"],
"storage-driver": "overlay2",
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"live-restore": true,
"metrics-enabled": false,
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 65536,
"Soft": 65536
}
}
}
✅ 说明:
log-opts:限制日志大小,防止日志撑爆磁盘。live-restore:Docker 守护进程重启时保持容器运行,提升可用性。metrics-enabled: false:关闭 Prometheus 指标收集,节省资源。
2. 设置默认 cgroup 驱动为 systemd(推荐)
{
"exec-opt": ["native.cgroupdriver=systemd"]
}
⚠️ 注意:某些旧版本 Docker 可能不支持 systemd 驱动,需测试兼容性。
二、内核参数优化(/etc/sysctl.conf)
编辑后执行 sysctl -p 生效:
# 增加文件描述符上限
fs.file-max = 655350
# 增加 inode 缓存
vm.vfs_cache_pressure = 50
# 启用 TCP 快速回收
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
# 增大本地端口范围
net.ipv4.ip_local_port_range = 1024 65535
# 禁用 ICMP 重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
# 启用 SYN Cookies 防御 SYN Flood
net.ipv4.tcp_syncookies = 1
# 禁用 IP 转发(除非你需要做路由器/NAT)
net.ipv4.ip_forward = 0
三、限制容器资源使用(关键!)
1. 在 docker run 或 docker-compose.yml 中显式限制资源
示例:docker-compose.yml
services:
app:
image: myapp:latest
deploy:
resources:
limits:
cpus: '0.5' # 最多占用 0.5 核
memory: 512M # 最多使用 512MB 内存
reservations:
cpus: '0.25'
memory: 256M
restart: unless-stopped
示例:docker run
docker run -d
--name myapp
--cpus=0.5
--memory=512m
--memory-swap=512m
--restart=unless-stopped
myapp:latest
✅ 建议:
- 每个容器限制 CPU ≤ 0.5 核、内存 ≤ 512MB。
- 总容器数控制在 6~8 个以内,预留 1GB 给宿主机系统和其他进程。
四、监控与告警
1. 安装轻量级监控工具
# 安装 htop、iftop、nethogs 等
apt install htop iftop nethogs net-tools -y
2. 使用 Docker Stats 监控
docker stats --no-stream
3. 可选:部署轻量级监控栈
- Prometheus + Grafana(资源占用较高,谨慎使用)
- cAdvisor(单独监控容器资源)
- Node Exporter(监控宿主机)
💡 对于 2C4G 小服务器,建议仅部署 cAdvisor + 简单脚本告警,避免监控本身占用过多资源。
五、其他优化建议
| 项目 | 建议 |
|---|---|
| 镜像选择 | 使用 Alpine 或 Distroless 基础镜像,减小体积 |
| 日志轮转 | 配置 log-opts 防止日志爆炸 |
| Swap 设置 | 可启用少量 Swap(如 512MB),但性能敏感场景不建议依赖 Swap |
| 内核版本 | 使用 Linux 5.x+ 内核,支持更好的 cgroup v2 |
| Docker 版本 | 使用最新稳定版 Docker CE |
| 安全加固 | 禁用 rootless 模式外的 root 权限容器;定期更新镜像 |
六、验证配置是否生效
# 检查 Docker 配置
docker info
# 查看当前资源使用情况
free -h
top -bn1 | head -20
df -h
# 测试容器资源限制
docker run -it --rm --cpus=0.5 --memory=256m alpine sh
总结:2C4G 服务器部署 Docker 的关键点
- 限制每个容器资源(CPU + 内存)
- 控制容器数量(建议 ≤ 8 个)
- 优化内核参数和网络设置
- 限制日志大小,防止磁盘写满
- 使用轻量级基础镜像
- 避免部署重型监控栈
通过以上优化,可以在 2C4G 服务器上稳定运行多个轻量级微服务或 Web 应用。
轻量云Cloud