温馨提示×

Docker在Ubuntu中的最佳实践有哪些

小樊
47
2025-11-22 19:59:40
栏目: 智能运维

Docker 在 Ubuntu 的最佳实践

一 安装与基础配置

  • 使用官方或可信仓库安装,保持版本更新;在 Ubuntu 20.04/22.04 LTS 上优先选择 x86_64/amd64arm64 的受支持版本。安装后用 systemd 管理守护进程,确保开机自启与运行状态正常。
  • 将普通用户加入 docker 组以避免长期使用 sudo(加入后需重新登录生效)。
  • 首次运行验证:执行 docker run hello-world 确认安装与运行正常。
  • 建议将 Docker 数据目录规划到独立磁盘或 LVM 卷,便于容量扩展与维护(如后续迁移或扩容)。
  • 示例要点:
    • sudo apt-get update && sudo apt-get install -y docker-ce docker-ce-cli containerd.io
    • sudo systemctl enable --now docker
    • sudo usermod -aG docker $USER
    • docker run hello-world
    • 数据目录规划:/var/lib/docker 建议预留 40GB+

二 守护进程与性能优化

  • 配置镜像加速与并发:在 /etc/docker/daemon.json 设置 registry-mirrorsmax-concurrent-downloadsmax-concurrent-uploads,显著提升拉取/推送速度。
  • 存储驱动:优先使用 overlay2(需底层文件系统支持 d_type),性能与稳定性更佳。
  • 日志轮转:限制容器日志大小与数量,避免磁盘被撑满。
  • 资源限制:为容器设置 –cpus–memory,防止单容器耗尽主机资源。
  • 内存与 swap 限制生效:在部分 Ubuntu/Debian 上需启用 cgroup memory accounting,否则会出现 “WARNING: No memory limit support” 等提示,导致内存/swap 限制不生效。
  • 可选网络规划:如与内网 172.17.0.0/16 冲突,可在 daemon.json 中设置 bip 自定义 docker0 网段。
  • 示例配置片段:
    • { “registry-mirrors”: [“https://”], “max-concurrent-downloads”: 10, “max-concurrent-uploads”: 10, “storage-driver”: “overlay2”, “log-driver”: “json-file”, “log-opts”: { “max-size”: “10m”, “max-file”: “3” }, “bip”: “169.254.123.1/24” }
      修改后执行:sudo systemctl daemon-reload && sudo systemctl restart docker。

三 安全加固

  • 最小权限:容器内以 非 root 用户运行(Dockerfile 中创建并切换用户)。
  • 安全选项:启用 AppArmor/SELinux,并使用 no-new-privileges 禁止提权;按需配置 seccomp 以限制系统调用。
  • 镜像与软件供应链:优先使用可信基础镜像,定期更新与扫描漏洞。
  • 资源隔离:为容器设置 CPU/内存 限额,降低被攻击时的资源滥用风险。
  • 网络最小化:仅暴露必要端口,使用自定义桥接网络或按需配置更严格的网络策略。
  • 示例要点:
    • Dockerfile:RUN useradd -m app && USER app
    • docker run --security-opt no-new-privileges --cap-drop=ALL …
    • 仅映射必要端口:-p 8080:80

四 日志、存储与网络管理

  • 日志治理:统一使用 json-file 驱动并设置 max-size/max-file;定期清理历史日志与无用数据。
  • 磁盘空间维护:定期执行 docker system prune -a 清理悬空镜像、停止容器与无用卷,防止 /var/lib/docker 爆满。
  • 数据持久化:数据库等状态服务使用 卷(volume) 或绑定挂载到宿主机安全目录,避免将数据写入容器可写层。
  • 网络实践:默认桥接网络可满足基础需求;多容器应用优先使用 自定义桥接网络 以获得更稳定与可控的服务发现与隔离。
  • 故障排查:服务异常用 sudo journalctl -u docker.service 查看日志;容器间/对外网络异常可先重启 Docker 并检查网络列表与端口映射。

五 多容器编排与日常运维

  • 使用 Docker Compose 管理多容器应用(定义服务、网络、卷与端口),开发/测试环境一键启停,生产环境可结合 CI/CD 与编排平台。
  • 编排演进:小规模可用 Docker Swarm;大规模与自动化程度高的场景建议使用 Kubernetes
  • 运维习惯:为关键服务设置 重启策略(如 restart: unless-stopped)、健康检查与资源限额;变更通过版本化的 Compose 文件或清单管理。
  • 示例要点:
    • docker-compose up -d
    • 在 Compose 中为 web/redis/db 分别定义 image、ports、volumes 与 restart 策略。

0