🎉

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

2022/10/16に公開約2,300字

はじめに

watchコマンドについて

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

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

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

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

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

https://formulae.brew.sh/formula/watch

watchコマンドの使い方

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

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

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

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

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

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

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

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

実行結果

Every 2.0s: docker ps

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
# 最初は当然起動中のコンテナはなにもない

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

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

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

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

実行結果

Every 2.0s: docker ps

CONTAINER ID   IMAGE     COMMAND     CREATED     STATUS    PORTS     NAMES
0e7b22e2be39   nginx     ... # 以下省略

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

実行結果

Every 2.0s: docker ps 

CONTAINER ID   IMAGE     COMMAND     CREATED     STATUS    PORTS     NAMES
# なにも無くなった

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

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

実行結果

Every 2.0s: docker ps -a

CONTAINER ID   IMAGE     COMMAND     CREATED     STATUS    PORTS     NAMES
0e7b22e2be39   nginx     ... # 以下省略
# 停止中のコンテナが表示される

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

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

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

実行結果

Every 2.0s: docker ps -a

CONTAINER ID   IMAGE     COMMAND     CREATED     STATUS    PORTS     NAMES
# なにもなくなった

最後に

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

Discussion

ログインするとコメントできます