docker statsコマンドの使い方(実例で解説)

Docker公式ロゴ3b
©2023 Docker Inc. All rights reserved

 本記事はDocker ver24.0.7の環境で確認しています。

 このコマンドは、コンテナのリソース使用状況のサマリー情報を、一定間隔おきに表示させることが出来ます。

 Linuxのtopコマンドをご存知の方には、そのコマンドに似たような機能といった方が解りやすいかもしれません。

docker statsコマンドのフォーマットとオプション

フォーマット

docker stats [オプション] [ 対象コンテナ名 | ID] [ 対象コンテナ名 | ID . . .]

主なオプション一覧

オプション概説
-a, --allDockerホスト内に存在する全てのコンテナの
情報を出力する
(オプション無しの場合は実行中のコンテナ
のみ対象)
--no-stream表示内容のリアルタイム更新は無く、初回表
示のみで終了する
--no-truncコンテナIDを省略表示しない

コマンド例

$ docker stats
$ docker stats testvm testvm2 testvm3
$ docker stats --no-stream

docker statsコマンドの主な使い方

 以下で実例をまじえたコマンドの使い方を解説していきたいと思います。

実例では、Ubuntuの公式イメージにより起動したコンテナ(testvm)を使用します。

コンテナは「docker run -dit --init --name testvm ubuntu」で起動します。

※「--rm」オプションを付けておりませんので、ご利用後はコンテナ削除をお忘れなく。

基本事項の解説

 docker statsは、実行中のコンテナのリソース使用状況のリアルタイムレポートを表示するコマンドです。

 どのコンテナが一番CPUを使っている、ネットワークの負荷が高いのはどのコンテナか、などの使い方ができます。

 有用な情報を出力してくれますが、Linuxのtopコマンドのほうが使い勝手は上だと思います。

実行中の全コンテナのリソース使用状況を表示する

 以下のコマンドを実行します。

$ docker stats

 以下のように、画面上に、起動中のコンテナのCPU使用率やメモリ使用量などの情報が表示されます。

CONTAINER     ID NAME      CPU %  MEM USAGE / LIMIT   MEM %  NET I/O    BLOCK I/O      PIDS
96b351078f39  testvm-mem6  0.00%  1.547MiB / 1GiB     0.15%  648B / 0B  0B / 0B        1
9cbf61e5d2be  testvm-mem5  0.00%  1.516MiB / 1.875GiB 0.08%  648B / 0B  0B / 0B        1
f53571799f24  testvm-mem2  0.00%  1.535MiB / 1.875GiB 0.08%  648B / 0B  0B / 0B        1
78a0a0864a66  testvm-mem   0.00%  1.676MiB / 1.875GiB 0.09%  648B / 0B  9.6MB / 12.3kB 1
22755b68256f  testvm       0.00%  416KiB / 1.875GiB   0.02%  648B / 0B  7.15MB / 0B    1

 値がリアルタイムに更新しているように見えると思います。

 表示は、「Ctrl」+cを押すと止まります。

 止めた後、画面を上にスクロースしてみると解るのですが、docker statsを実行すると、dockerクライアントが端末の上下幅を自動取得して、表示がズレないように空行を出力して、コンテナのリソース情報を一定間隔で連続して出力しています。

 最初は、terminalの画面制御機能を使用してリアルタイム表示させているのかと思ったのですが、止めた後に確認してみてわかりました。

 出力間隔は、dockerのソースコードを確認したところ0.5秒固定のようです。

 出力されている内容は、左から、コンテナID、コンテナ名、CPU使用率、メモリ使用率/メモリ上限値、メモリ使用率、ネットワークIO量、ブロックデバイスIO量、PIDSです。

 PIDSの出力内容がわからなかったので、Docker公式ドキュメントを見たところ、コンテナによって生成されたプロセスとカーネルスレッドの数、と記述がありました。

コンテナを指定してリソース使用状況を出力する

 前の項で既に使用してしまいましたが、以下のようにdocker statsコマンドを実行する際に、コンテナIDもしくは名前を指定して実行した場合、指定したコンテナのみのリソース使用状況が出力されます。

 例えば、以下のとおりtestvmとtestvm2とtestvm3を指定して実行してみます。

$ docker stats testvm testvm2 testvm3

※事前に3つのコンテナを起動する必要があります

 実行結果は、以下のように出力されます。

CONTAINER ID NAME    CPU %  MEM USAGE / LIMIT    MEM % NET I/O      BLOCK I/O PIDS
d28f497c728e testvm  0.00%  1.141MiB / 921.3MiB  0.12% 1.54kB / 0B  0B / 0B 2
ecd8cfba0f99 testvm2 0.00%  1.133MiB / 921.3MiB  0.12% 796B / 0B    0B / 0B 2
c37ef2542904 testvm3 0.00%  1.152MiB / 921.3MiB  0.13% 726B / 0B    0B / 0B 2

最初の1回のみ出力して終了する

 デフォルトでは、実行を止めるまで0.5秒おきに出力され続けますが、「--no-stream」オプションを付けて実行した場合、出力は最初の1回だけになります。

$ docker stats --no-stream

 普段使用する際は、最初の1回だけで十分な気もします。

停止中のコンテナを含めた全コンテナのリソース使用状況を出力する

 デフォルトでは、実行中のコンテナのみが出力対象ですが、「-a」オプションを付けて実行した場合、停止中のコンテナも出力されます。

$ docker stats -a

 しかし、使用しているterminalの行数を超える数のコンテナを出力した場合、出力された文字がチカチカして非常に見にくくてちょっと使いづらいですね。

 terminalの出力内容をファイルに吐き出すログ機能がある場合は、docker statsの内容をファイルに出力して、後から参照するという方法で使用することにすれば便利かもしれません。

おわりに

  以上でdocker statsコマンドの紹介を終わります。

 ご指摘、ご要望などが御座いましたらコメントいただけるとうれしいです。

 他のDockerコマンドの実例付紹介記事は、本サイト内の別記事「Dockerのコマンドの一覧(オリジナルな実例付き)」をご参照ください。

 ご訪問ありがとうございました!

コメント