Ubuntu Docker 资源监控实用指南
一 快速上手 内置命令
- 查看容器清单与状态
- 运行容器:docker ps
- 全部容器(含已停止):docker ps -a
- 按状态过滤:docker ps -f status=running
- 查看容器详细信息(含资源限制)
- docker inspect <容器ID或名称>
- 示例:提取状态与内存限制
- docker inspect --format ‘{{.State.Status}} {{.HostConfig.Memory}}’ <容器ID>
- 实时资源监控
- 全部运行中容器:docker stats
- 指定容器:docker stats <容器ID或名称>
- 非流式一次性输出:docker stats --no-stream <容器ID或名称>
- 容器内进程与日志
- 容器内进程:docker top <容器ID或名称>
- 容器日志:docker logs -f <容器ID或名称>(按 Ctrl+C 退出)
二 可视化与长期观测 cAdvisor Prometheus Grafana
- 部署 cAdvisor(采集容器指标)
- 推荐方式(使用宿主机网络,减少端口映射复杂性):
- docker run -d --name=cadvisor --net=host --privileged=true google/cadvisor:latest
- 访问 Web UI:http://<宿主机IP>:8080
- 部署 Prometheus(拉取与存储指标)
- 示例(解压即用,生产建议以 systemd 托管):
- 下载并解压 Prometheus(示例版本:2.30.3)
- 启动:./prometheus --config.file=prometheus.yml &
- 配置抓取 Docker 指标(prometheus.yml 片段):
- 抓取 cAdvisor:
- - job_name: ‘docker’
- static_configs: [ { targets: [‘localhost:8080’] } ]
- 若使用 cAdvisor 的 /metrics HTTP 接口(部分部署为 9323):
- - job_name: ‘docker-metrics’
- static_configs: [ { targets: [‘localhost:9323’] } ]
- 部署 Grafana(可视化)
- 安装与启动:
- sudo apt-get update && sudo apt-get install -y grafana
- sudo systemctl start grafana-server && sudo systemctl enable grafana-server
- 访问 Web UI:http://<宿主机IP>:3000
- 添加数据源:选择 Prometheus,URL 例如 http://localhost:9090,保存并测试
- 建议的展示面板
- 容器 CPU、内存、网络 I/O、磁盘 I/O 使用率与趋势
- 宿主机资源与容器维度的对比视图
三 进阶与系统层面工具
- Sysdig(系统级观测,含容器视角)
- 运行示例(需特权与挂载宿主机关键目录):
- *docker run -it --rm --name sysdig --privileged=true *
- *–volume=/var/run/docker.sock:/host/var/run/docker.sock *
- *–volume=/dev:/host/dev *
- *–volume=/proc:/host/proc:ro *
- *–volume=/boot:/host/boot:ro *
- *–volume=/lib/modules:/host/lib/modules:ro *
- –volume=/usr:/host/usr:ro sysdig/sysdig
- Weave Scope(拓扑与资源可视化)
- 一键启动后可查看容器间调用关系、资源占用与快速排障入口
- htop(宿主机进程视角)
- 安装:sudo apt-get install -y htop
- 运行:htop,用于观察 dockerd 及容器相关进程的资源占用
四 生产实践 告警阈值与资源限制
- 设置资源限制(预防单容器失控)
- CPU:限制最多使用 0.5 核
- docker run -d --cpus 0.5 --name app1 my-image
- 内存:最大 512MB,内存+交换分区总和 1GB
- docker run -d --memory 512m --memory-swap 1g --name app1 my-image
- 动态调整运行中容器(Docker 20.10+)
- docker update --cpus 1.0 --memory 1g <容器ID>
- 告警阈值建议(示例)
- 容器内存使用率持续 > 80%
- 容器 CPU 使用率持续 > 80%
- 容器重启次数异常增长
- 宿主机剩余内存 < 10% 或负载持续偏高
- 排查路径简表
- 先看实时:docker stats
- 再看配置与状态:docker inspect
- 看容器内进程:docker top
- 看事件与日志:docker events、docker logs -f
- 长期趋势与可视化:cAdvisor + Prometheus + Grafana