Dockerヘルパーツールの「Recker」をつくってみた

recker

個人的には便利に使ってるとはいえ「他人さまにはどうかなあ…」と思って公開をためらっていたツールを公開してみます。Docker ヘルパーツールの「Recker」(レッカー)です。

なんとなくデファクトスタンダードになってしまったDocker。それなりに便利に使ってるんですが、

  • いろいろめんどくさい
  • かんたんにしようと思ってなんかツールを入れようとしたら規模がデカすぎる

ということが多いんですよね。「ぼくが欲しかったのはコレジャナイ!」的な。欲しいのは、docker コマンドに皮をかぶせた程度のCLIなんです。

ということで Recker は以下のような機能を備えたツールです:

  • 作業対象イメージ・コンテナを一覧画面からカーソルキーで選択する機能
  • TAB キーでのイメージ・コンテナ名・ID補完機能
  • docker build の゛土台“(scaffold)作成機能
  • docker run の簡便化、ポート・リンク・ボリュームの設定サポート機能

ぼくのところでは、コンテナはいつもこれで作っています。特に、ビルドのたびに「秘伝のタレ」を継ぎ足していたスクリプトを消してつくった scaffold はけっこうラクです。こんな感じで使います。

$ recker scaffold my_sl_container
$ cd ~/Docker/Dockerfiles/my_sl_container
$ cat <<'_EOF_' >> container_build.sh
yum -y install epel-release
yum -y install sl
_EOF_
$ sed -i -e 's|^\(EXEC\)=$|\1=/usr/bin/sl|' config.sh
$ recker build ./
$ recker run ./
                      (@@) (  ) (@)  ( )  @@    ()    @
                 (   )
             (@@@@)
          (    )

        (@@@)
     ====        ________                ___________
 _D _|  |_______/        \__I_I_____===__|_________|
  |(_)---  |   H\________/ |   |        =|___ ___|
  /     |  |   H  |  |     |   |         ||_| |_||     _
 |      |  |   H  |__--------------------| [___] |   =|
 | ________|___H__/__|_____/[][]~\_______|       |   -|
 |/ |   |-----------I_____I [][] []  D   |=======|____|_
__/ =| o |=-~~\  /~~\  /~~\  /~~\ ____Y___________|__|___
|/-=|___|=   O=====O=====O=====O|_____/~\___/          |
 \_/      \__/  \__/  \__/  \__/      \_/
$ 

あと、開発環境をたくさん立ち上げたい人向けに、HTTP/SSHのポートを自動インクリメントリマップしてコンテナを起動させるなんてことも気軽にできます。

$ recker scaffold call_apache
$ cd ~/Docker/Dockerfiles/call_apache
$ cat <<'_EOF_' >> container_build.sh
yum -y install httpd
_EOF_
$ cat <<'_EOF_' >> container_services.sh
service httpd start
_EOF_
$ sed -i \
    -e 's|^\(RUN_AS_SERVICE\)=.\{0,\}$|\1=1|' \
    -e 's|^\(AUTOMAP_PORT_HTTP\)=.\{0,\}$|\1=1|' \
    config.sh
$ recker build ./
$ recker run ./
HTTP port auto-mapped to: 8000
Changed mode to background because of declaration RUN_AS_SERVICE
8214acd40c4c5afeae9746a08ff9b32722709b05d18fd5783f11d929b7f76b00
$ recker run ./
HTTP port auto-mapped to: 8001
Changed mode to background because of declaration RUN_AS_SERVICE
0d7a3a762cffe07b0522841b9f71b4bdea29fe9f24b647e962a9ba5ce505eb3f
$ recker run ./
HTTP port auto-mapped to: 8002
Changed mode to background because of declaration RUN_AS_SERVICE
cd0a73733580ad604263d1fa4c140d41367fde3a7314fb567495826089342ce0
    :

TAB補完は…実は今のDockerだとbashcompletion入れるだけで有効になるんですけどね。ほぼ相当くらいの機能を自前で実装してます。とはいえ、あまり頭を使いたくないときはカーソル+Enterでイメージ・コンテナを選択できるモードが便利かと。

ということで興味のある方がいらしたら使ってみて、クレームくださいな。