Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

VimでDockerコンテナを操作する

$
0
0

こんにちわ。
ゴリラ.vimを運営しているゴリラです。

みなさんVimとコンテナは好きですか?
普段VimでDockerfileを書いたりする時にコンテナの状態気になりませんか?
あの子元気かな?とか、この子今起きているかなとか、いろいろ気になると思います。

そんな方むけにVimからコンテナを操作したり、監視したりするプラグインを作ってみました。

どういうやつ?

docker.vim.gif

できること

現時点で以下のことができます。
のんびり開発中でまだ実装したい機能がありますが、とりあえず形になったので公開しました。

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#geturlqueryparameterを渡せば良いだけです。簡単ですね。

一覧表示ではテーブルを使っています。こちらに関しては、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がたくさん来ることを楽しみにしています。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>