docker 入门 | 第7章 容器监控 和 第8章 容器日志 详解

第7章 容器监控

摘要 :本章讲解 Docker 容器监控与日志两大主题。监控方面,一是 Docker 自带的监控子命令(docker ps 查看运行容器、docker top 查看容器内进程、docker stats 实时查看资源使用率);二是 Google 开发的 cAdvisor 可视化监控工具,通过挂载宿主机目录、开放 8080 端口收集宿主机与所有容器的资源数据,并导出给第三方工具进一步加工处理。日志方面,首先介绍容器日志概述(STDOUT/STDERR 标准输出与错误),然后对比前台与后台运行容器的日志区别,接着介绍两种查看后台容器日志的方式:docker attach(实时查看新日志,但看不到历史日志且退出麻烦)和 docker logs(推荐使用,可打印容器启动以来的全部完整日志,-f 参数实时跟踪)。文末附两章考点速记。

1、Docker自带监控子命令

背景:Docker集群规模变大之后,需要可视化监控容器性能、健康状态

1.1 docker ps

作用:查看当前正在运行的容器。

输出字段:容器ID、镜像、启动命令、创建时间、状态、端口映射、容器名称。

1.2 docker top

作用:查看容器内部运行的进程

语法:**docker top 容器名/容器ID **

  • 别名:docker container top
  • 支持追加Linux ps命令参数,例如==docker top sshtest -au ==,查看进程详细信息(用户、CPU、内存等)。
  • 输出:UID、PID、PPID、启动时间、命令等进程信息。

1.3 docker stats

作用:实时**列出容器资源使用率**(CPU、内存、网络IO、磁盘IO)。

语法:docker stats 选项 容器名/ID

常用选项:

  • -a / --all展示所有容器(默认只展示运行中的容器)
  • --no-stream:只输出一次结果,不持续实时刷新
  • --no-trunc不截断容器ID
  • --format:自定义输出格式,支持table、json模板

输出内容:容器ID、名称、CPU使用率、内存使用/内存限制、内存占比、网络收发、磁盘读写、进程数量PIDS。

重要考点:容器启动未指定内存limit限制时,stats会显示宿主机内存总量,不代表容器可以使用全部宿主机内存


2、cAdvisor监控工具

2.1 简介

cAdvisor是Google开发的**容器可视化监控工具**。

2.2 启动cAdvisor容器命令

bash 复制代码
[root@docker ~]# docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:rw \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor:latest

备选国内镜像:hub.c.163.com/xbingo/cadvisor:latest,解决国外镜像拉取慢问题。

逐行解释
  1. docker run:创建并启动容器

复制代码
   --volume=/:/rootfs:ro
  • --volume(简写 -v):数据卷挂载,格式 宿主机路径:容器内路径:权限
  • /:宿主机根目录
  • /rootfs:容器里的挂载点
  • ro = read-only 只读权限
  • 作用:让cAdvisor读取宿主机根文件系统,用来采集硬件信息;只读防止修改宿主机文件。
复制代码
   --volume=/var/run:/var/run:rw
  • rw = read-write 读写权限
  • /var/run:存放系统运行时socket文件(docker的socket就在这里)
  • 作用:cAdvisor要和Docker引擎通信,获取容器列表;必须读写。
复制代码
   --volume=/sys:/sys:ro
  • 挂载宿主机/sys目录(系统硬件、内核信息目录),只读
  • 作用:读取CPU、内存、硬件传感器数据,用于监控指标。
复制代码
   --volume=/var/lib/docker/:/var/lib/docker:ro
  • 挂载Docker的数据目录,只读
  • 作用:读取容器磁盘占用、存储层信息。
复制代码
   --publish=8080:8080

(简写 -p)

  • 端口映射:宿主机端口:容器内端口
  • 宿主机8080端口映射容器8080端口
  • 访问:浏览器 http://宿主机IP:8080 打开cAdvisor监控页面。
复制代码
   --detach=true

简写 -d)

  • 后台守护进程运行容器,不占用终端。
复制代码
   --name=cadvisor
  • 给容器命名为 cadvisor,后续操作(stop/logs)直接用这个名字。
复制代码
   google/cadvisor:latest
  • 使用镜像:google/cadvisor,latest代表最新版本。

总结:后台启动cAdvisor监控容器,挂载宿主机多个系统目录(大部分只读,仅/var/run读写),开放8080端口,用来收集宿主机与所有容器的资源监控数据

2.3 访问与使用

  1. 浏览器访问地址:http://宿主机IP:8080
  2. 首次打开加载较慢,程序需要采集数据绘制监控图表。
  3. 页面**点击Docker Containers**,** 查看各个容器详细资源监控信息**。

2.4 总结

缺点:操作界面略显简陋,而且需要在不同页面之间跳转,并且只能监控一个 host。

优点:可以将监控到的数据导出给第三方工具,由这些工具进一步加工处理。

结论:把 cAdvisor 定位为一个监控数据收集器,并导出数据给第三方工具,而非展示数据。

本章考点速记

  1. docker ps:查看运行容器;
  2. docker top:查看容器内进程;
  3. docker stats:实时查看容器CPU/内存/IO资源。
  4. docker stats不加内存限制时,显示宿主机总内存,不等于容器可用上限。
  5. cAdvisor:谷歌开发容器可视化监控,部署成容器,网页8080端口访问。

第8章 容器日志

1、容器日志概述

日志、监控对保障系统稳定运行、故障排查至关重要。

微服务架构下容器数量多、生命周期短;容器销毁后日志容易丢失,集中式日志管理系统是生产环境必备组件

对于一个运行的容器,Docker 会将日志发送到 容器标准输出设备(STDOUT)和标准错误设备(STDERR),STDOUT 和 STDERR 实际上就是容器的控制台终端。

2、容器前台、后台运行日志区别

  • 前台启动容器(不加 -ddocker run -p 80:80 httpd日志直接打印在当前终端。

  • 后台守护式启动容器(加 -ddocker run -d -p 80:80 httpd终端看不到实时输出

后台容器查看日志有两种方式:docker attachdocker logs

3、docker attach

作用:连接到正在运行的容器,实时查看新产生日志。

缺点:

① 只能看到attach连接之后 新产生的日志,容器历史旧日志看不到

② 退出操作麻烦:需要快捷键 Ctrl+p 然后 Ctrl+q ;如果直接按Ctrl+C,会把容器直接停止

4、docker logs(推荐使用)

作用:打印容器从启动以来全部完整日志

常用参数:-f 持续跟踪实时日志,效果等同于Linux tail -f

对比:docker logs 优于attach,生产环境排查日志优先使用docker logs

本章简答考点速记

  1. 容器的日志输出:STDOUT标准输出、STDERR标准错误。
  2. attach缺点:看不到历史日志;Ctrl+C会终止容器。
  3. docker logs:查看完整历史日志;-f实时跟踪日志。
相关推荐
亚川楼宇自控系统数据中心厂家1 小时前
IBMS 集成如何打通数据中心的子系统数据孤
运维
Experience-摆渡1 小时前
开源RAG知识库WeKnora深度调研:让知识自己长成体系
爬虫·docker·开源·rag
闲云野鹤在人间1 小时前
docker 入门 | 第5章 网络详解
网络·docker·架构·华为云·php
蓝速科技1 小时前
桌面双屏翻译机量产调试:三类场景兼容性破局方案丨蓝速科技
运维·数据库·人工智能·科技·技术分享
见闻小天地1 小时前
脱硫脱硝塔选变频器避坑指南:四方DL500变频器使用体验分享
大数据·运维·人工智能·业界资讯
怕浪猫1 小时前
从 Windows 换到 Mac 三个月,我真香了
算法·面试·架构
吴声子夜歌2 小时前
Shell编程实例——内务及管理任务(一)
linux·运维·shell
闲云自留地2 小时前
告别敲命令!DockerUI 与 Portainer 可视化容器管理实战
docker·容器
商业看点解说2 小时前
Amazon Bedrock AgentCore 能否用于搭建与运维多智能体应用?
架构