🎉

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

2022/10/16に公開

はじめに

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