タイトルの通りですが、pecoでDockerを操作するコマンドを作りました。
はじめに理想を言うと、素のDockerコマンドをタイポせずすごい勢いで打てるのが一番カッコイイと思ってるのですが自分には無理なので最高のインタフェースを持つpeco(本当はpercol)でDocker操作を効率化できるようにしました。

これまではよく紹介されてるshell設定のエイリアスやスクリプト、pecoと組み合せた操作を設定して満足できてたんですが、ただ目的の操作のために毎回コマンドを実行しないといけないのが微妙にめんどいなって思ってたので1回のコマンド操作できるよう作りました。

だいたいの雰囲気はこんな感じです

  • docker rmを連続で選択した場合

gdic rm

  • docker execを実行した場合(zsh設定でCtr-x rにバインドして起動してます)

gdic exec

特徴

https://github.com/fujimisakari/gdic

  • コマンド名は go docker incremental cli の略から gdic としました。(特徴から単語を並べてみただけです)
  • 次のDockerコマンドをpecoで起動 → 選択できるようになる
    • docker exec
    • docker run
    • docker stop
    • docker rm
    • docker rmi
  • stoprmrmiの場合は一度コマンドを起動するとexitしない限りは連続で選択できる
  • runexec の場合は、選択したコンテナ名で実行コマンドを生成できる
  • rmrmi のコマンド失敗時もpeco上でエラーメッセージを確認することができる

インストール方法

pecoをインストールして、gdicをgo getします(バイナリの配布はしていません)

1
2
3
4
5
6
7
# macの場合
$ brew install peco

# Linuxの場合
https://github.com/peco/peco/releasesからバイナリをダウンロードして実行Pathへ配置

$ go get github.com/fujimisakari/gdic

使い方

Dockerコマンドをgdicに変更して実行すると、コマンドに関連した候補がpecoで起動されます。

1
2
3
4
5
$ gdic exec
$ gdic run
$ gdic stop
$ gdic rm
$ gdic rmi

あと、お好みですがShell設定(zsh)に以下を追加してます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# alias設定
alias dstop='gdic stop'
alias drm='gdic rm'
alias drmi='gdic rmi'

# dockerコンテナのRun先を選択
function peco-docker-run () {
BUFFER=$(gdic run)
CURSOR=$#BUFFER
zle clear-screen
}
zle -N peco-docker-run
bindkey '^Xr' peco-docker-run

# dockerコンテナのexec先を選択
function peco-docker-exec () {
BUFFER=$(gdic exec)
CURSOR=$#BUFFER
zle clear-screen
}
zle -N peco-docker-exec
bindkey '^Xe' peco-docker-exec

X