在容器的使用過程當中,若是能及時的掌握容器使用的系統資源,不管對開發仍是運維工做都是很是有益的。幸運的是 docker 本身就提供了這樣的命令:docker stats。docker
docker stats 命令用來顯示容器使用的系統資源。不帶任何選項執行 docker stats 命令:json
$ docker stats
默認狀況下,stats 命令會每隔 1 秒鐘刷新一次輸出的內容直到你按下 ctrl + c。下面是輸出的主要內容:
[CONTAINER]:以短格式顯示容器的 ID。
[CPU %]:CPU 的使用狀況。
[MEM USAGE / LIMIT]:當前使用的內存和最大可使用的內存。
[MEM %]:以百分比的形式顯示內存使用狀況。
[NET I/O]:網絡 I/O 數據。
[BLOCK I/O]:磁盤 I/O 數據。
[PIDS]:PID 號。網絡
若是不想持續的監控容器使用資源的狀況,能夠經過 --no-stream 選項只輸出當前的狀態:運維
$ docker stats --no-stream
這樣輸出的結果就不會變化了,看起來省勁很多。工具
若是咱們只想查看個別容器的資源使用狀況,能夠爲 docker stats 命令顯式的指定目標容器的名稱或者是 ID:spa
$ docker stats --no-stream registry 1493
當有不少的容器在運行時,這樣的結果看起來會清爽一些。這裏的 registry 和 1493 分別是容器的名稱和容器的 ID。注意,多個容器的名稱或者是 ID 之間須要用空格進行分割。3d
細心的同窗可能已經發現了,第一列再也不顯示默認的容器 ID,而是顯示了咱們傳入的容器名稱和 ID。基於此,咱們能夠經過簡單的方式使用容器的名稱替代默認輸出中的容器 ID:code
$ docker stats $(docker ps --format={{.Names}})
用容器的名稱替代 ID 後輸出的結果是否是友好一些?orm
咱們在前面搞了點小手段把輸出中的容器 ID 替換成了名稱。其實 docker stats 命令支持咱們經過 --format 選項自定義輸出的內容和格式:blog
$ docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
上面的命令中咱們只輸出了 Name, CPUPerc 和 Memusage 三列。下面是自定義的格式中可使用的全部佔位符:
.Container 根據用戶指定的名稱顯示容器的名稱或 ID。
.Name 容器名稱。
.ID 容器 ID。
.CPUPerc CPU 使用率。
.MemUsage 內存使用量。
.NetIO 網絡 I/O。
.BlockIO 磁盤 I/O。
.MemPerc 內存使用率。
.PIDs PID 號。
有了這些信息咱們就能夠徹底按照本身的需求或者是偏好來控制 docker stats 命令輸出的內容了。
除了以 table 格式輸出結果,還能夠經過 format 選項輸出 json 格式的結果:
$ docker stats --no-stream --format \ "{\"container\":\"{{ .Container }}\",\"memory\":{\"raw\":\"{{ .MemUsage }}\",\"percent\":\"{{ .MemPerc }}\"},\"cpu\":\"{{ .CPUPerc }}\"}"
經過 docker stats 命令咱們能夠看到容器使用系統資源的狀況。這爲咱們進一步的約束容器可用資源或者是調查與資源相關的問題提供了依據。除了 docker 自帶的命令,像 glances 等工具也已經支持查看容器使用的資源狀況了,有興趣的朋友能夠去了解一下。