Docker在Ubuntu中的最佳实践有哪些
小樊
47
2025-11-22 19:59:40
Docker 在 Ubuntu 的最佳实践
一 安装与基础配置
- 使用官方或可信仓库安装,保持版本更新;在 Ubuntu 20.04/22.04 LTS 上优先选择 x86_64/amd64 或 arm64 的受支持版本。安装后用 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-mirrors、max-concurrent-downloads、max-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 策略。