CLOVER🍀

That was when it all began.

実行中のDockerコンテナの情報を確認する

Dockerコンテナの情報を確認するにはどうしたらいいのかな?ということで、ちょっと調べてみました。

Docker標準のコマンドと、ctopというものが有用そうです。

確認用に、2つのコンテナを用意します。

ひとつは、nginx。

$ docker container run -it --rm --name nginx nginx:latest

もうひとつは、Ubuntu LinuxのコンテナにApache Benchをインストールします。このコンテナから、nginxのコンテナに負荷を
かけたりして取得できる情報の変化を確認していきたいと思います。

$ docker container run -it --rm --name ab ubuntu:latest bash
# apt update -y && apt install apache2-utils -y

docker container top

最初は、docker container top。

docker container top | Docker Documentation

名前こそ「top」ですが、使い方はpsコマンドと同じようです。

以下のように、「docker container top [コンテナ名]」で指定します。

$ docker container top nginx
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                7530                7498                0                   00:14               pts/0               00:00:00            nginx: master process nginx -g daemon off;
systemd+            7582                7530                0                   00:14               pts/0               00:00:00            nginx: worker process

結果は、psコマンドのように得られ、後ろにはpsコマンドと同じオプションが入れられるようです(デフォルトは「-ef」と同じ)。

$ docker container top nginx -ef
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                7530                7498                0                   00:14               pts/0               00:00:00            nginx: master process nginx -g daemon off;
systemd+            7582                7530                0                   00:14               pts/0               00:00:00            nginx: worker process


$ docker container top nginx aux
USER                PID                 %CPU                %MEM                VSZ                 RSS                 TTY                 STAT                START               TIME                COMMAND
root                7530                0.0                 0.0                 32656               5188                pts/0               Ss+                 00:14               0:00                nginx: master process nginx -g daemon off;
systemd+            7582                0.0                 0.0                 33112               2600                pts/0               S+                  00:14               0:00                nginx: worker process

docker container stats

続いて、docker container stats。

docker container stats | Docker Documentation

こちらは、いわゆるtopコマンドですね。

$ docker container stats

こんな感じで、現在のコンテナの情報が表示され、更新されていきます。

CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
f469fd5fb584        nginx               0.00%               2.566MiB / 15.58GiB   0.02%               6.29kB / 0B         0B / 0B             2
4b58ba4fb668        ab                  0.00%               6.418MiB / 15.58GiB   0.04%               18.3MB / 808kB      197kB / 68.2MB      1

指定可能なオプションは、こちら。

Options

表示される項目の意味は、こちらを見た方がよいでしょう。

docker stats | Docker Documentation

(Examples)[https://docs.docker.com/engine/reference/commandline/stats/#examples)

ここで、Apache Benchを実行してnginxに負荷をかけてみます。

# ab -n 1000000 -c 25 http://172.17.0.3/

CPU使用率などの情報が更新されていることが、確認できます。

CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
f469fd5fb584        nginx               102.15%             4.223MiB / 15.58GiB   0.03%               140MB / 362MB       0B / 0B             2
4b58ba4fb668        ab                  102.22%             17.53MiB / 15.58GiB   0.11%               380MB / 140MB       197kB / 68.2MB      2

ctop

最後は、ctopです。

GitHub - bcicen/ctop: Top-like interface for container metrics

見た感じ、「docker container stats」をより詳細に表示できるもののようです。

ダウンロードして、実行可能権限を付与します。

$ wget https://github.com/bcicen/ctop/releases/download/v0.7.2/ctop-0.7.2-linux-amd64 -O ctop
$ chmod a+x ctop

実行。

$ ./ctop

「docker container stats」のように、現在のコンテナの状態が確認できます。

f:id:Kazuhira:20190418002617p:plain

指定可能なオプションは、こちら。

Options

「-scale-cpu」でホスト全体として見た時のCPU使用率を見たり、「-f」で表示するコンテナをフィルタリングすることが
できます。

とりあえず、Apache Benchでnginxに負荷をかけてみましょう。

# ab -n 1000000 -c 25 http://172.17.0.3/

こんな感じの表示になります。

f:id:Kazuhira:20190418003036p:plain

ここで、「-scale-cpu」オプションを付けると、ホスト全体としてのCPU使用率になるので

$ ./ctop -scale-cpu

こういう表示になります。
※このホストは8つCPUがあります

f:id:Kazuhira:20190418003127p:plain

また、ひとつのコンテナを対象にして、より詳細に情報を見ることもできます。

f:id:Kazuhira:20190418003313p:plain

f:id:Kazuhira:20190418003342p:plain

便利そうですね。

Dockerの標準コマンドと合わせて、使えるところでは使っていきましょう。