みなさんVimとコンテナは好きですか?
普段VimでDockerfileを書いたりする時にコンテナの状態気になりませんか?
あの子元気かな?とか、この子今起きているかなとか、いろいろ気になると思います。
そんな方むけにVimからコンテナを操作したり、監視したりするプラグインを作ってみました。
どういうやつ?
できること
現時点で以下のことができます。
のんびり開発中でまだ実装したい機能がありますが、とりあえず形になったので公開しました。
images
- get images
- delete image
- pull image
containers
- start/stop/restart/kill container
- delete container
- attach container(require docker command)
- monitoring container CPU/MEM
使い方
READMEを参照してください。
コマンドとキーバインドがあります。基本一覧ではキーバインドを使った操作になります。
例えば、:DockerContainers
でcontainers画面を開き、uでコンテナ起動、sでコンテナを停止します。
おすすめポイント
Vimを止めることなくattachしつつ、CPUやMEMの使用率を監視できる機能が推しです。
ただ、モニターに関しては現在Mac/Linuxしか対応していないので、今後Windowsも対応していく予定です。
attachに関しては、裏でdocker exec -it {container} {cmd}
というふうに実行しているので、dockerコマンドが必要になってきます。
仕組み
API通信は裏でcurlを使っています。curl --unix-socket /var/run/docker.sock http://localhost/containers/json
という感じでコマンドを実行しています。
こちらはvital
というライブラリのweb.http
モジュールを使っています。
プラグインで使いやすいように、それを更にすこしwarapした関数を用意しました。
" http getfunction! docker#api#http#get(url, param) abort
returns:HTTP.request(a:url,{ \'unixSocket':'/var/run/docker.sock', \'param':a:param \})endfunction
あとは docker#api#http#get
にurl
とqueryparameter
を渡せば良いだけです。簡単ですね。
一覧表示ではテーブルを使っています。こちらに関しては、text.table
モジュールを使用しています。
こちらを使用すれば簡単にテーブルを作れます。とても便利ですね。
" ヘッダとカラム数を指定してtableオブジェクトを作るletl:image_table =s:TABLE.new({ \'columns':[{},{},{},{},{}], \'header':['ID','REPOSITORY','TAG','CREATED','SIZE'], \})" curlのレスポンスを1行ずつ整形してテーブルに追加for row ina:ctx.content[a:ctx.offset:a:ctx.offset +a:ctx.top-1]letl:image = docker#util#parse_image(row)calll:image_table.add_row([ \l:image.Id, \l:image.Repo, \l:image.Tag, \l:image.Created, \l:image.Size])endfor" table.stringify()で実際のテーブルテキストを出力leta:ctx.view_content =l:image_table.stringify()
ざっくりですが、実はそんな難しいことはしていなくて、
裏でDocker EngineのAPIを叩いて結果に応じてVimのポップアップウィンドウを使っていい感じにインターフェイスを用意して操作する感じです。
最後に
このプラグインはまだ開発途中です。
バグや要望があればissueやPRをください。みなさんの意見・要望・PRがたくさん来ることを楽しみにしています。