docker中的top命令

简介

客户交流中被问到的两个问题
1.在docker中运行top命令能否看到宿主机的内存CPU信息?
2.op能看到容器外面宿主机的进程吗?

提问:在docker中运行top命令能否看到宿主机的内存CPU信息?

回答这个问题之前我们首先想以下linux系统中的/proc目录是干什么的

/proc是个伪文件系统,存在于内存之中而不是硬盘上。通过它可以和内核内部数据结构进行交互,获取 有关进程的有用信息。
/proc中会有以下文件:

  • /proc/cpuinfo - CPU 的信息(型号, 家族, 缓存大小等)
  • /proc/meminfo - 物理内存、交换空间等的信息
  • /proc/mounts - 已加载的文件系统的列表
  • /proc/devices - 可用设备的列表
  • /proc/filesystems - 被支持的文件系统
  • /proc/modules - 已加载的模块
  • /proc/version - 内核版本
  • /proc/cmdline - 系统启动时输入的内核命令行参数
  • /proc/{pid} - 进程信息

top正是通过/proc来获取当前内存、CPU信息的。dock er启动的容器共享操作系统内核,在容器启动的时候会挂载部分/proc里面的文件,能否通过top在docker中看到内存和CPU信息,主要看有没有挂载这些文件。

那么问题又来了,需要手动挂载这些文件吗?一般来说不需要,挂载内容的多少一般和镜像有关。一般的redhat/ubuntu镜像都是会挂载内存CPU信息的,精简的dokcer镜像信息会少些,有时top得到的信息不全面。

另外一个问题,top能看到容器外面宿主机的进程吗?

经过上面分析top看到信息的多少取决于/proc里面内容,由于pid 命名空间的隔离,宿主机的pid信息不会被启动容器挂载,所以看不到容器外宿主机进程。

  • free -m命令原理和top类似