在 2 核 CPU 的 Linux 服务器上部署 Docker 时,需重点关注资源限制、容器调度、性能调优及安全性。以下是关键注意事项:
1. 严格限制容器资源使用
- CPU 限制:避免容器独占全部 2 个 vCPU,否则可能引发系统负载过高。建议为每个容器设置
--cpus或cpu_quota/cpu_period(例如单容器 ≤0.5~1.0)。docker run --cpus=0.8 nginx:alpine # 或使用 cgroup v2(推荐) docker update --cpus=0.8 <container_id> - 内存限制:务必设置
--memory和--memory-swap,防止 OOM Killer 误杀系统进程。docker run --memory=512m --memory-swap=512m myapp - Swap 配置:若物理内存紧张,可禁用 swap(
docker run --memory-swap=-1),但需确保宿主机有足够 RAM;否则合理启用并限制 swap 使用。
2. 优化 Docker 守护进程配置
编辑 /etc/docker/daemon.json(若无则创建):
{
"default-ulimits": {
"nofile": { "Name": "nofile", "Hard": 65536, "Soft": 65536 }
},
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"storage-driver": "overlay2",
"exec-opts": ["native.cgroupdriver=cgroupfs"]
}
- 限制日志大小防磁盘爆满;
- 确认 cgroup driver 与 systemd 一致(CentOS/RHEL 7+ 推荐
systemd); - 关闭不需要的插件(如
network-plugin若非必需)。
3. 网络与端口管理
- 优先使用
bridge网络 + 端口映射,避免host模式(减少安全暴露面); - 明确规划端口分配,避免冲突(尤其当运行多个服务时);
- 考虑使用 Docker Compose 统一管理多容器网络拓扑。
4. 存储策略
- 数据卷挂载到独立目录(如
/data/volumes),避免占用根分区; - 对高频写入场景(如数据库),评估是否需 SSD 或 tmpfs 临时存储;
- 定期清理未用镜像/容器:
docker system prune -a --volumes(谨慎操作)。
5. 监控与告警
- 安装轻量级监控工具(如
cAdvisor+Prometheus+Grafana),重点监控:- CPU 使用率(
docker stats实时查看) - 内存泄漏风险
- I/O 等待时间
- CPU 使用率(
- 设置 alertmanager 阈值(如 CPU > 80% 持续 1 分钟触发告警)。
6. 安全加固
- 禁止以 root 用户运行容器内应用(
USER指令); - 启用 seccomp 默认配置文件(Docker 默认已启用,勿手动禁用);
- 避免
--privileged标志; - 定期更新 Docker Engine 及基础镜像。
7. 替代方案考量
若业务复杂度高或并发需求大,可考虑:
- 使用 Podman(无 daemon,更轻量安全);
- 迁移至轻量级虚拟机(KVM/QEMU)隔离环境;
- 将部分服务移至云函数或 Serverless 平台。
💡 实践建议:先在测试环境模拟高负载场景(如
stress-ng --cpu 2 --timeout 300s),观察 Docker 行为后再上线生产。始终遵循“最小权限”和“资源预留”原则。
如需针对具体应用场景(如微服务、CI/CD、数据库等)进一步细化方案,可提供更多背景信息。
PHPWP博客