WebLog

watchコマンドでコンテナの一生を見届ける

2022/10/16 15:28

はじめに

watch コマンドについて

watch コマンドって知ってますか? 僕は恥ずかしながら最近知りました。 オプションとかだた --watch とかはよくありますが、これが由来なんですかね?

watch コマンド コマンドを一定の時間ごとに実行して結果を端末にスクロールさせずに固定で表示してくれるコマンド。

つまり、リアルタイムで実行結果が反映されるようにするコマンドです。 今回は watch コマンドを使ってコンテナを作ったり壊したりしてみます。

watch コマンドのインストール

1brew install watch # homebrewでインストール
2watch -v # 正常にインストールされていることの確認
watch — Homebrew Formulae
watch — Homebrew Formulae

watch — Homebrew Formulae

Homebrew’s package index

watch コマンドの使い方

1watch 定期実行したいコマンド
2# 例: watch lsとかwatch docker psみたいな感じに

デフォルトでは、2 秒ごとに実行されますが、この間隔をn オプションによって指定することができます

1watch ls           # 2秒ごとに定期実行
2watch -n 5 ls # 5秒ごとに定期実行

他のオプションは以下のような感じ:

オプション説明
-c色表示に対応してくれる
-eコマンドがエラー終了したら定期実行をやめる
-gコマンドの出力に変化があったらやめる
-d変化した部分を強調して表示してくれる
-n実行間隔を指定する。最小は 0.1(秒)
-tヘッダーを非表示にする 

watch コマンドで docker を監視する

とりあえず watch コマンドでdocker psコマンドをします。

1watch docker ps # 実行中のdockerをリスト表示する

実行結果

1Every 2.0s: docker ps
2
3CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4# 最初は当然起動中のコンテナはなにもない

当然何も表示されていません。

次に、ターミナルの別ウィンドウでdocker runしてみます。 vscode だとCtrl + Shift + 5でターミナルを分割できます。

1docker run nginx # nginxイメージをもとにdockerコンテナを起動

すると watch コマンドを実行してたターミナルに変化があると思います。

実行結果

1Every 2.0s: docker ps
2
3CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
40e7b22e2be39 nginx ... # 以下省略

次に、docker runを実行してたターミナルを Ctrl + Cで一回止めてコンテナを停止します。 コンテナが停止したことで、docker psに表示されなくなりました。

実行結果

1Every 2.0s: docker ps
2
3CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4# なにも無くなった

今度は watch コマンドを実行していたターミナルも一回Ctrl + Cで止めて、今度は停止中のコンテナも含めて見てみます。つまりdocker ps -aコマンドを watch で実行します。

1watch docker ps -a # 起動中または停止中のコンテナをリスト表示

実行結果

1Every 2.0s: docker ps -a
2
3CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
40e7b22e2be39 nginx ... # 以下省略
5# 停止中のコンテナが表示される

またまた、別のウィンドウを開いて、今度は停止しているコンテナを削除してみます。

1docker rm 0e # 0eから始まるコンテナIDのコンテナを削除(コンテナIDは実行ごとに異なる)

するとdocker ps -aを実行中のターミナルからコンテナが消えます

実行結果

1Every 2.0s: docker ps -a
2
3CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4# なにもなくなった

最後に

watch コマンドは色々使い道ありそうです。 今回は試しませんでしたが、c とか d オプション指定したものを alias で登録しておいたりするのもよさそうだと思いました。

最新の投稿