低配置Linux服务器安装Docker有什么注意事项?

在低配置 Linux 服务器(如 1核/512MB 或 1核/1GB 内存)上安装 Docker,核心痛点不在于“能不能装”,而在于“装了之后系统会不会崩”。Docker 本身并不重,但容器运行时、镜像层管理以及潜在的内存泄漏风险对资源极其敏感。

以下是经过实战验证的注意事项和操作建议,按优先级排序:

1. 前置条件:Swap(交换空间)是救命稻草

低配服务器最忌讳物理内存耗尽导致 OOM(Out of Memory)。一旦 Swap 被禁用,进程直接 Kill,服务瞬间不可用。

  • 必须开启 Swap:即使你有 1GB 内存,也建议至少预留 1-2GB 的 Swap 空间。这能作为缓冲池,防止突发流量导致内核直接杀掉关键进程。
  • 配置建议:

    # 创建 2GB swap 文件示例
    sudo fallocate -l 2G /swapfile
    sudo chmod 600 /swapfile
    sudo mkswap /swapfile
    sudo swapon /swapfile
    
    # 写入 fstab 确保重启生效
    echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
  • 调整 Swappiness:默认通常是 60,对于低配服务器,建议调低至 10,让系统更倾向于使用物理内存,仅在必要时才使用 Swap,减少磁盘 I/O 带来的延迟抖动。
    sysctl vm.swappiness=10

2. Docker 版本选择:稳定压倒一切

不要追求最新版的 Docker CE,低配服务器更需要稳定性。

  • 推荐版本:选择 Docker 的 LTS(长期支持)版本 或稍旧一点的稳定版(如 20.10.x 系列),避免使用刚发布的最新版,因为新版往往包含更多的调试信息和潜在的性能开销。
  • 安装方式:优先使用官方脚本或包管理器,避免从源码编译,节省时间和磁盘空间。

3. 存储驱动选择:overlay2 是底线

  • 必须使用 overlay2:这是目前 Linux 下性能最好、兼容性最佳的存储驱动。
  • 避免使用 vfs:虽然 vfs 兼容性最好(无内核模块要求),但它会将每个层的文件完整复制一份,导致磁盘 I/O 极高且占用巨大空间,绝对不适合低配服务器。
  • 检查命令:
    docker info | grep "Storage Driver"

4. 镜像与容器管理:极简主义

低配服务器的磁盘和内存都宝贵,必须严格控制资源消耗。

  • 基础镜像选择:
    • 严禁使用 Ubuntu/CentOS 全量镜像运行简单服务。
    • 首选 Alpine Linux:体积仅 5MB 左右,安全漏洞少,启动极快。
    • 次选 Distroless 或 Slim 版本:如 python:3.9-slim、node:18-alpine。
  • 清理机制:
    • 定期执行 docker system prune -a 清理悬空镜像和停止的容器。
    • 编写 cron 任务自动清理旧日志和临时文件。
  • 限制容器资源:这是最关键的一步。不要依赖 Docker 的默认限制(通常无限制),务必为每个容器指定 CPU 和内存上限。
    # docker-compose.yml 示例
    services:
      web:
        image: nginx:alpine
        deploy:
          resources:
            limits:
              memory: 128M  # 严格限制内存
              cpus: '0.5'   # 限制 CPU 使用率

5. 日志管理:防止磁盘写满

Docker 默认将容器日志输出到 /var/lib/docker/containers/<id>/<id>-json.log,这个文件会无限增长,直到撑爆磁盘。

  • 配置日志轮转:在 /etc/docker/daemon.json 中全局配置日志大小限制。
    {
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "10m",
        "max-file": "3"
      }
    }

    这样每个日志文件最大 10MB,最多保留 3 个文件,总日志占用不超过 30MB。

6. 网络与端口映射

  • 避免使用 host 模式:除非必要,尽量使用 bridge 网络,减少宿主机网络栈的压力。
  • 关闭不必要的防火墙规则:如果服务器位于云厂商 VPC 内,优先使用安全组(Security Group)管理入站流量,而不是在服务器内部维护复杂的 iptables/nftables 规则,以降低 CPU 开销。

7. 监控与告警:别等挂了才知道

低配服务器没有冗余,单点故障即全线崩溃。

  • 轻量级监控:部署一个极简的监控X_X,如 node-exporter + Prometheus + Alertmanager,或者直接使用云厂商自带的云监控 Agent(如阿里云 CloudMonitor、腾讯云 CWP)。
  • 关键指标:重点监控 Memory Usage %、Disk Inode Usage(inode 耗尽比磁盘满更常见)、Load Average。
  • 自动重启策略:为关键容器设置 restart: unless-stopped,并在 docker-compose 中配置 healthcheck,实现健康检查失败时自动重启。

8. 操作系统优化

  • 最小化安装 OS:只安装必要的组件,禁用不需要的服务(如 firewalld、selinux 若无需可关闭)。
  • 内核参数调优:适当增加 fs.file-max 和 net.core.somaxconn,以应对高并发连接。
    # /etc/sysctl.conf
    fs.file-max = 65535
    net.core.somaxconn = 1024

总结 checklist:

  1. [ ] 已创建并启用 Swap 分区。
  2. [ ] Docker 存储驱动为 overlay2。
  3. [ ] 所有容器均设置了内存和 CPU 限制。
  4. [ ] Docker 日志已配置轮转,防止磁盘写满。
  5. [ ] 使用了 Alpine 或 Slim 基础镜像。
  6. [ ] 配置了健康检查和自动重启策略。

遵循以上步骤,可以在极低配置的服务器上稳定运行 Docker 服务,避免因资源竞争导致的系统崩溃。

未经允许不得转载:CLOUD云枢 » 低配置Linux服务器安装Docker有什么注意事项?