基于本文回答

播面 播面

文解图解播客视频,多维讲透八股文
0
评论

如何查看运行中容器的实时资源消耗(如 CPU 使用率、内存占用、网络 I/O、磁盘 I/O)?

在 Docker 中,查看运行中容器的实时资源消耗有多种方法,从最基础的内置命令到直观的图形化工具。以下是几种最常用的方法:


方法一:使用 Docker 内置命令(最推荐、最快速)

Docker 自带了一个类似 Linux top 的命令,专门用于实时监控容器资源。

1. 查看所有运行中容器的实时状态:

bash
docker stats

输出示例:

plaintext
CONTAINER ID   NAME            CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O         PIDS
a1b2c3d4e5f6   web_server      0.15%     45.2MiB / 7.797GiB    0.57%     1.2MB / 345kB     0B / 12.3MB       8
f7g8h9i0j1k2   db_postgres     1.50%     120.5MiB / 7.797GiB   1.51%     450B / 0B         1.2MB / 45.6MB    12

指标说明:

  • CPU %:容器占用的 CPU 使用率(如果是多核 CPU,该值可能会超过 100%)。
  • MEM USAGE / LIMIT:当前内存使用量 / 容器可用的内存上限。
  • MEM %:内存使用百分比。
  • NET I/O:容器通过网络接收(Rx)和发送(Tx)的数据量。
  • BLOCK I/O:容器对磁盘(块设备)的读写数据量。
  • PIDS:容器内运行的进程或线程数。

2. 仅查看指定容器(支持查看一个或多个):

bash
docker stats 容器名或容器ID
# 例如:
docker stats web_server db_postgres

3. 实用技巧:

  • 只输出一次结果(不实时刷新):适合脚本调用。
    bash
    docker stats --no-stream
  • 自定义输出格式(只看容器名、CPU 和内存):
    bash
    docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"

方法二:使用 ctop(命令行图形化工具,体验极佳)

如果你觉得 docker stats 的界面太简陋,可以使用 ctop。它提供了一个类似 top 的交互式命令行界面,支持上下键选择容器、回车查看详细折线图等。

安装与运行:

  • macOS (Homebrew):
    bash
    brew install ctop
  • Linux (直接下载二进制):
    bash
    sudo wget https://github.com/bcicen/ctop/releases/download/v0.7.7/ctop-0.7.7-linux-amd64 -O /usr/local/bin/ctop
    sudo chmod +x /usr/local/bin/ctop
  • 通过 Docker 运行自身(免安装):
    bash
    docker run --rm -ti \
      --name=ctop \
      --volume=/var/run/docker.sock:/var/run/docker.sock:ro \
      quay.io/vektorlab/ctop:latest

直接在终端输入 ctop 即可启动,按 h 可以查看帮助快捷键。


方法三:查看单个容器内的进程状态

如果你想知道某个容器内部具体是哪个进程占用了 CPU 或内存,可以使用:

bash
docker top 容器名或容器ID

这相当于在容器内部执行了 ps 命令。


方法四:Portainer(Web 图形化界面)

如果你更喜欢在浏览器中通过可视化图表(折线图)查看实时资源占用,可以使用 Portainer

  1. 运行 Portainer
    bash
    docker run -d -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer-ce
  2. 打开浏览器访问 http://IP:9000
  3. 在容器列表中,点击对应容器“Quick Actions”栏下的 Stats 柱状图图标,即可看到 CPU、内存、网络、I/O 的实时动态折线图。

总结建议

  • 临时快速查看:直接用 docker stats
  • 终端高级监控:推荐安装 ctop
  • 生产环境长期监控:建议部署 Prometheus + Grafana + cAdvisor 监控体系。