LV055-容器监控与管理
一、概述
1. 为什么需要容器监控
- 容器化应用资源隔离、数量多、生命周期短
- 监控能提前发现问题、快速定位故障
- 常见监控对象:CPU、内存、网络、磁盘、应用健康状态
2. 监控的主要指标
我们监控的指标主要有:CPU 利用率、内存占用网络流量、I/O(读写速率)运行状态、健康检查等。
3. 监控的原理
- Docker Engine 通过 API 暴露实时数据
- 监控工具/命令定期拉取、展示 docker 容器状态
二、容器生命周期管理
以下是一些最常用的容器管理命令:
docker ps -a # 列出所有容器(包括停止的容器)
docker ps # 仅列出运行中的容器
docker start <container_id> # 启动容器
docker stop <container_id> # 停止容器
docker restart <container_id> # 重启容器
docker rm <container_id> # 删除容器(需要先停止)
docker rm -f <container_id> # 强制删除运行中的容器三、容器资源监控
Docker 提供了多种方式来监控容器的资源使用情况。我们这里还是在 CNB 中测试,可以通过下面的命令启动两个容器:
docker run -d --name nginx_V1 nginx:alpine
docker run -it -d -p 8080:8080 tomcat:8.5.46-jdk8-openjdk【例】

1. docker stats
1.1 基本命令
docker stats 命令用于实时显示 Docker 容器的资源使用情况,包括 CPU、内存、网络 I/O 和块 I/O。类似于 Linux 系统中的 top 命令,但它专门针对 Docker 容器。通过 docker stats,用户可以监控容器的资源使用情况,帮助优化性能和进行故障排除。
docker stats [OPTIONS] [CONTAINER...]OPTIONS:
- --all , -a : 显示所有的容器,包括未运行的。
- --format : 指定返回值的模板文件。
- --no-stream : 展示当前状态就直接退出了,不再实时更新。
- --no-trunc : 不截断输出。
1.2 使用示例
- (1)显示所有运行的容器的资源使用情况
docker stats【例】
➜ /workspace git:(main) docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
c393a2008839 angry_blackwell 211.90% 124.6MiB / 16GiB 0.76% 726B / 0B 0B / 0B 53
af4256a91eee nginx_V1 0.00% 10.36MiB / 16GiB 0.06% 1.32kB / 0B 0B / 0B 9
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
c393a2008839 angry_blackwell 211.90% 124.6MiB / 16GiB 0.76% 726B / 0B 0B / 0B 53
af4256a91eee nginx_V1 0.00% 10.36MiB / 16GiB 0.06% 1.32kB / 0B 0B / 0B 9然后就会一直打印状态,按 Ctrl+c 即可退出。
CONTAINER ID 与 NAME: 容器 ID 与名称。
CPU % 与 MEM %: 容器使用的 CPU 和内存的百分比。
MEM USAGE / LIMIT: 容器正在使用的总内存,以及允许使用的内存总量。
NET I/O: 容器通过其网络接口发送和接收的数据量。
BLOCK I/O: 容器从主机上的块设备读取和写入的数据量。
PIDs: 容器创建的进程或线程数。
- (2)只显示一次数据而不是持续刷新
docker stats --no-stream【例】
➜ /workspace git:(main) docker stats --no-stream
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
c393a2008839 angry_blackwell 0.07% 128.1MiB / 16GiB 0.78% 866B / 0B 0B / 0B 53
af4256a91eee nginx_V1 0.00% 10.36MiB / 16GiB 0.06% 1.39kB / 0B 0B / 0B 9
➜ /workspace git:(main) docker stats --no-stream
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
c393a2008839 angry_blackwell 0.07% 128.2MiB / 16GiB 0.78% 866B / 0B 0B / 0B 53
af4256a91eee nginx_V1 0.00% 10.36MiB / 16GiB 0.06% 1.39kB / 0B 0B / 0B 92. docker inspect
2.1 基本命令
docker inspect 命令用于获取 Docker 对象(容器、镜像、卷、网络等)的详细信息。它返回 JSON 格式的详细信息,可以帮助用户了解对象的配置和状态。
docker inspect [OPTIONS] NAME|ID [NAME|ID...]OPTIONS:
-f, --format: 使用 Go 模板语法格式化输出。--type: 返回指定类型的对象信息(可选类型:container、image、network、volume)。
2.2 使用示例
docker ps
docker inspect container_id3. docker top
3.1 基本命令
docker top 命令用于显示指定容器中的正在运行的进程。类似于 Linux 中的 top 或 ps 命令,它帮助用户查看容器内的进程信息,便于监控和调试容器内的活动。
docker top [OPTIONS] CONTAINER [ps OPTIONS]3.2 使用示例
- (1)查看容器内的进程
docker top container_id【例】

- (2)使用自定义 ps 选项
docker top container_id -o pid,user【例】
➜ /workspace git:(main) docker top c393a2008839 -o pid,user
PID USER
388 root这将显示容器 container_id 中所有正在运行的进程,并只显示 pid 和 user 列。
4. docker top
4.1 基本命令
docker port 命令用于显示容器的端口映射信息,即容器内部的端口如何映射到宿主机的端口。
docker port CONTAINER [PRIVATE_PORT[/PROTO]]CONTAINER: 要查询端口映射的容器的名称或 ID。PRIVATE_PORT(可选): 容器内部的端口号。PROTO(可选): 协议类型(tcp或udp),默认是tcp。
4.2 使用示例
- (1)查看容器的所有端口映射
docker port container_id # 查看容器端口映射【例】

四、容器日志与调试
1. 基本命令
docker logs 命令用于获取和查看容器的日志输出。
docker logs [OPTIONS] CONTAINEROPTIONS:
-f, --follow: 跟随日志输出(类似于tail -f)。--since: 从指定时间开始显示日志。-t, --timestamps: 显示日志时间戳。--tail: 仅显示日志的最后部分,例如--tail 10显示最后 10 行。--details: 显示提供给日志的额外详细信息。--until: 显示直到指定时间的日志。
2. 使用示例
docker logs <container_id> # 查看容器日志
docker logs -f <container_id> # 实时查看最新日志
docker logs --tail 100 <container_id> # 查看最近 100 行日志
docker logs -t <container_id> # 显示时间戳五、可视化监控工具
1. 简介
docker 也有一些可视化的监控工具,比如:
- Portainer:简单、直观的 Docker 管理 Web 面板
- cAdvisor:实时采集容器资源消耗,Google 开发
- Prometheus+Grafana:企业级监控与可视化
2. Portainer 简介
2.1 简介
官网的描述就很简单:简单、直观的 Docker 管理界面,让容器编排更轻松。
Portainer 是一个轻量级的 Docker 管理工具,提供了直观的 Web 界面来管理 Docker 环境。它提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm 集群和服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型单位对容器管理的全部需求。
2.2 主要功能
| 仪表盘概览 | 查看环境整体状态 |
| 监控资源使用情况 | |
| 查看事件日志 | |
| 容器管理 | 创建、启动、停止、删除容器 |
| 查看容器日志和统计信息 | |
| 进入容器终端 | |
| 修改容器配置 | |
| 镜像管理 | 拉取和删除镜像 |
| 构建新镜像 | |
| 推送镜像到仓库 | |
| 网络管理 | 创建和管理 Docker 网络 |
| 配置容器网络连接 | |
| 数据卷管理 | 创建和删除数据卷 |
| 管理数据卷权限 |
3. 安装 Portainer
这里我们还是在 CNB 默认云原生开发环境进行,安装工具部分其实看官网就行:
# 创建 Portainer 数据卷
docker volume create portainer_data
# 运行 Portainer 容器
docker run -d -p 9000:9000 \
--name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:2.29.2注意:/var/run/docker.sock 这个文件一般不要暴露到公网(就是不要让公网可以访问到这个文件),除非是有一个完全安全的环境。
安装完成后,在 cnb 上我们可以通过添加一个 9000 的端口映射来实现外网访问, 可以按照如下步骤来配置。

3. 使用 Portainer
3.1 创建用户
刚才我们在宿主机运行起来 portainer 容器后,我们就可以访问http://localhost:9000/,进来后会首先需要创建一个用户,输入密码然后创建即可:

创建完毕后就会来到主界面了:

3.2 查看宿主机容器
我们点击【home】会看到如下界面:

然后进入这个local,从这里就可以看到我们宿主机上有多少个容器,多少个镜像,以及数据卷等信息:

3.3 容器状态
我们在这里就可以看到容器的状态:
