--json フラグを使用してイベントを JSON 形式で出力
このステップでは、docker events
コマンドに--json
フラグを追加して Docker イベントを JSON 形式で出力する方法を学びます。イベントを JSON 形式で出力することは、プログラムによる処理や他のツールとの連携に有用です。
まず、~/project/my-compose-app
ディレクトリにいることを確認してください。
cd ~/project/my-compose-app
次に、docker events
コマンドに--json
フラグを付けて実行します。これにより、イベントが JSON 形式でストリーム表示されます。
docker events --json
JSON オブジェクトの継続的なストリームが表示され、各オブジェクトが Docker イベントを表します。出力は以下のようになります(詳細は異なります):
{"status":"create","id":"1234567890abcdef...","from":"nginx:latest","Type":"container","Action":"create","Actor":{"ID":"1234567890abcdef...","Attributes":{"image":"nginx:latest","name":"my-compose-app-web-1"}},"scope":"local","time":1678886400,"timeNano":1678886400123456789}
{"status":"start","id":"1234567890abcdef...","from":"nginx:latest","Type":"container","Action":"start","Actor":{"ID":"1234567890abcdef...","Attributes":{"image":"nginx:latest","name":"my-compose-app-web-1"}},"scope":"local","time":1678886401,"timeNano":1678886401987654321}
...
各行は有効な JSON オブジェクトで、イベントのstatus
、影響を受けるオブジェクトのid
、Type
、Action
、イメージ名やコンテナ名などのAttributes
を含むActor
の詳細など、イベントに関する詳細情報が含まれています。
これらのイベントをキャプチャするデモンストレーションとして、docker events --json
コマンドが別のターミナルまたはバックグラウンドで実行されている間に、web
サービスを停止してから再起動してみましょう。この実験では単一のターミナルを使用しているため、まずCtrl + C
を押してdocker events --json
コマンドを停止します。
では、web
サービスを停止します。
docker-compose stop web
web
コンテナが停止中であることを示す出力が表示されるはずです。
[+] Stopping 1/1
⠿ Container my-compose-app-web-1 Stopped
次に、docker events --json
をバックグラウンドで実行してから、サービスを再起動します。&
記号を使用してコマンドをバックグラウンドで実行します。
docker events --json &
プロセス ID(PID)が表示され、コマンドがバックグラウンドで実行されていることがわかります。
では、web
サービスを再起動します。
docker-compose start web
web
コンテナが起動中であることを示す出力が表示されるはずです。
[+] Starting 1/1
⠿ Container my-compose-app-web-1 Started
バックグラウンドで実行されているdocker events --json
コマンドは、stop
とstart
イベントをキャプチャします。バックグラウンドプロセスの出力を確認するには、fg
コマンドを使用してフォアグラウンドに戻すか、バックグラウンドプロセスが停止した後にターミナルの出力を確認する必要があります。ただし、このステップの目的では、単に--json
フラグを付けてコマンドを実行するだけで形式を理解するには十分です。
バックグラウンドのdocker events --json
プロセスを停止するには、jobs
コマンドでバックグラウンドジョブをリスト表示し、kill %<ジョブ番号>
を使用します。または、ps aux | grep 'docker events --json'
でプロセス ID を検索し、PID を指定してkill
コマンドを使用します。この文脈では、バックグラウンドプロセスが大きな干渉をしないため、次のステップに進むだけで十分です。
このステップでは、--json
フラグを使用して Docker イベントを構造化された JSON 形式で表示することに成功しました。これは自動化や分析に非常に価値があります。