在2核CPU的Linux服务器上部署Docker有哪些注意事项?

在 2 核 CPU 的 Linux 服务器上部署 Docker 时,需重点关注资源限制、容器调度、性能调优及安全性。以下是关键注意事项:

1. 严格限制容器资源使用

  • CPU 限制:避免容器独占全部 2 个 vCPU,否则可能引发系统负载过高。建议为每个容器设置 --cpuscpu_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 等待时间
  • 设置 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、数据库等)进一步细化方案,可提供更多背景信息。