2017年4月5日水曜日

docker events を試してみた

概要

docker events は dockerd 経由でコンテナのイベントがリアルタイムで取得できるコマンドです
今回は実際にコンテナを動かしコマンドがどういう動きをするか試してみました

環境

  • Mac OS X 10.12.3
  • docker 17.03

イベント情報を取得する

コマンドを実行してみましょう

  • docker events

すると、イベントの待受状態になります
この状態で alpine のコンテナを実行してみましょう

  • docker run --rm alpine echo hello

するとイベントの情報がずらずらと流れてくると思います

2017-04-03T01:09:47.401162062+09:00 container create 710b7b90c64b2e62b6e5b74230d74d54402212a9313c2b35000357a9d2ef6239 (image=alpine, name=nostalgic_galileo)
2017-04-03T01:09:47.405128013+09:00 container attach 710b7b90c64b2e62b6e5b74230d74d54402212a9313c2b35000357a9d2ef6239 (image=alpine, name=nostalgic_galileo)
2017-04-03T01:09:47.509438603+09:00 network connect ac9cb0cf106310f33ae77d528b4aa1d7c47c8a55b91f12b6afe12d00844a40a2 (container=710b7b90c64b2e62b6e5b74230d74d54402212a9313c2b35000357a9d2ef6239, name=bridge, type=bridge)
2017-04-03T01:09:47.922252830+09:00 container start 710b7b90c64b2e62b6e5b74230d74d54402212a9313c2b35000357a9d2ef6239 (image=alpine, name=nostalgic_galileo)
2017-04-03T01:09:48.023143257+09:00 container die 710b7b90c64b2e62b6e5b74230d74d54402212a9313c2b35000357a9d2ef6239 (exitCode=0, image=alpine, name=nostalgic_galileo)
2017-04-03T01:09:48.307291714+09:00 network disconnect ac9cb0cf106310f33ae77d528b4aa1d7c47c8a55b91f12b6afe12d00844a40a2 (container=710b7b90c64b2e62b6e5b74230d74d54402212a9313c2b35000357a9d2ef6239, name=bridge, type=bridge)
2017-04-03T01:09:48.460536812+09:00 container destroy 710b7b90c64b2e62b6e5b74230d74d54402212a9313c2b35000357a9d2ef6239 (image=alpine, name=nostalgic_galileo)

ながい!ですがよく見ると

create -> attach -> connect -> start -> die -> disconnect -> destroy

というイベントの流れを確認できると思います

他のイベントを見てみる

先ほどの alpine を実行するコマンドのオプションを変えてみます

  • docker run alpine echo hello

するとイベントが以下のように流れると思います

create -> attach -> connect -> start -> die -> disconnect

最後の disconnect がないのがわかると思います
要するにコンテナは停止したけど削除まではされていないということになります

今度は別のイメージからコンテナを立ち上げてみます

  • docker run --name web1 -d -p 8080:8080 nginx

このコマンドでは

create -> connect -> start

というイベントが発生します
このまま停止、削除とコマンドを実行してみます

  • docker stop web1

kill -> die -> disconnect -> stop

  • docker rm web1

destroy

kill というイベントが一つ増えていました
ちなみに「-d」オプションがないと attach イベントが発生しません

現在あるイベントの一覧は以下の通りです
https://docs.docker.com/engine/reference/commandline/events/

コンテナのイベントの他、イメージやネットワーク、ボリュームごとにイベントが用意されています

最後に

docker events コマンドの挙動を試してみました
イベントは API も提供されているので、これを使って通知や別の処理を実行したりすることができます

次回は ruby でイベント情報を取得してみたいと思います

0 件のコメント:

コメントを投稿