19
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

こんにちわ。
ゴリラ.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 get
function! docker#api#http#get(url, param) abort
	return s:HTTP.request(a:url, {
				\ 'unixSocket': '/var/run/docker.sock',
				\ 'param': a:param
				\ })
endfunction

あとは docker#api#http#geturlqueryparameter を渡せば良いだけです。簡単ですね。

一覧表示ではテーブルを使っています。こちらに関しては、text.tableモジュールを使用しています。
こちらを使用すれば簡単にテーブルを作れます。とても便利ですね。

" ヘッダとカラム数を指定してtableオブジェクトを作る
let l:image_table = s:TABLE.new({
			\ 'columns': [{},{},{},{},{}],
			\ 'header' : ['ID', 'REPOSITORY', 'TAG', 'CREATED', 'SIZE'],
			\ })

" curlのレスポンスを1行ずつ整形してテーブルに追加
for row in a:ctx.content[a:ctx.offset:a:ctx.offset + a:ctx.top - 1]
	let l:image = docker#util#parse_image(row)

	call l:image_table.add_row([
				\ l:image.Id,
				\ l:image.Repo,
				\ l:image.Tag,
				\ l:image.Created,
				\ l:image.Size])
endfor

" table.stringify()で実際のテーブルテキストを出力
let a:ctx.view_content = l:image_table.stringify()

ざっくりですが、実はそんな難しいことはしていなくて、
裏でDocker EngineのAPIを叩いて結果に応じてVimのポップアップウィンドウを使っていい感じにインターフェイスを用意して操作する感じです。

最後に

このプラグインはまだ開発途中です。
バグや要望があればissueやPRをください。みなさんの意見・要望・PRがたくさん来ることを楽しみにしています。

19
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?