Docker容器运维最佳实践核心是让容器跑得稳、查得清、管得住、改得快:日志需通过Fluentd或Filebeat集中采集至Elasticsearch+Kibana;指标由cAdvisor+Prometheus+Grafana监控;权限须显式指定用户避免UID/GID不匹配;定期清理镜像与磁盘;统一stdout/stderr输出;配置重启策略、资源限制和健康检查。

Docker 容器运维最佳实践,核心是让容器跑得稳、查得清、管得住、改得快。
监控与日志必须统一接入
光靠 docker logs 看几行输出远远不够。生产环境要建立集中式日志和指标体系:
- 日志走 Fluentd 或 Filebeat 收集,输送到 Elasticsearch + Kibana,支持按容器名、标签、时间范围快速检索
- 指标用 cAdvisor 抓取容器级资源数据,Prometheus 定期拉取,Grafana 做可视化看板,重点关注 CPU 使用率突增、内存持续增长、OOMKilled 事件
- 关键服务加业务埋点(如 HTTP 请求成功率、队列积压数),和基础设施指标一起告警
权限与挂载目录要提前对齐
宿主机目录挂进容器后打不开?多半是 UID/GID 不匹配。别等报错再折腾:
- 启动时显式指定用户:
docker run -v /host/data:/app/data --user "$(id -u):$(id -g)" myapp - 或在 Dockerfile 里预设非 root 用户:
RUN groupadd -g 1001 -r app && useradd -r -u 1001 -g app app USER app
- 避免用
root运行应用,尤其涉及文件写入或网络暴露的服务
镜像和磁盘空间要定期清理
没人手动删镜像,磁盘迟早爆:
- 生产节点每天执行
docker system prune -f --filter "until=24h"清理停用容器、悬空镜像和未用网络 - 对长期运行的镜像,用
docker images --format "{{.Repository}}:{{.Tag}} {{.ID}}" | grep -v "<none>"检查冗余标签,只保留带语义版本(如v1.2.3)的镜像 - 容器内禁止写日志到
/var/log之类路径,统一 stdout/stderr 输出,由 Docker daemon 转发到日志驱动
容器行为要可预测、可收敛
- 所有容器启动加
--restart=unless-stopped,避免意外退出后服务中断 - 限制资源:
--memory=512m --cpus=1.0,防止单个容器吃光整机资源 - 健康检查写进 docker-compose.yml 或 Kubernetes Liveness Probe,不依赖进程存活,而是真实探测端口或 HTTP 接口
不复杂但容易忽略


















