Dockerコマンドをラッピングしてくれる「fugu」レビュー

Dockerコマンドを打つ場合には例えば次のように入力します。

docker run --detach --env="VERY=nice" --name="hello-world-nginx" --publish="8080:80" mattes/hello-world-nginx

ちょっと長くて設定をミスするとうまく動かなくて苦戦します。そこでDockerの起動設定をさらにラッピングして分かりやすくしてくれるツールがfuguです。

mattes/fugu

fuguの使い方

今回はさくらのクラウドで Ubuntu 14.04 LTS を使って試しています。

コマンドはバイナリが配布されていますので、パスの通ったディレクトにコピーするだけです。

curl -L https://github.com/mattes/fugu/releases/download/v1.1.1/fugu.v1.1.1.linux.x86_64.tar.gz | tar xvz
mv fugu.v1.1.1.linux.x86_64 /usr/local/bin/fugu
$ chmod +x /usr/local/bin/fugu
$ fugu --version
1.1.1

まず設定ファイル(fugu.yml)を書きます。

$ cat fugu.yml
image:  mattes/hello-world-nginx # mandatory
name:   hello-world-nginx
detach: true
publish:
  - 8080:80

これを実行します。

$ sudo fugu run -e VERY=nice
sudo: unable to resolve host ubuntu
docker run --detach --env="VERY=nice" --name="hello-world-nginx" --publish="8080:80" mattes/hello-world-nginx
Unable to find image 'mattes/hello-world-nginx' locally
Pulling repository mattes/hello-world-nginx
  :
7513295db096: Download complete 
65139809b1dbc597bf38d365a693c05ebcf2ef6f79c7739ea90f552f8e888a8e

これでnginxが起動しているDockerコンテナが起動しています。

$ docker ps
sudo: unable to resolve host ubuntu
CONTAINER ID        IMAGE                             COMMAND             CREATED             STATUS              PORTS                  NAMES
65139809b1db        mattes/hello-world-nginx:latest   nginx               42 seconds ago      Up 41 seconds       0.0.0.0:8080->80/tcp   hello-world-nginx   

publishで指定した8080番ポートが80番に渡るようになっていたり、runを行う際に-eオプションで渡した内容が環境変数として送られるようになっています。

終了する場合は fugu destroy を使います。

$ fugu destroy

終了させるコンテナの情報はfugu.ymlに入っていますので、特に名前を指定する必要もありません。とても簡単です。

その他のコマンドは次のようになっています。

$ fugu
Usage: fugu COMMAND [LABEL] [arg...]

Swiss Army knife for Docker.

Commands:
    build        Build an image from a Dockerfile
    run          Run a command in a new container
    exec         Run a command in a running container
    shell        Open a shell in a running container
    destroy      Kil a running container and remove it
    push         Push an image or a repository to the registry
    pull         Pull an image or a repository from the registry
    images       List images (from remote registry)
    show-data    Show aggregated data for label
    show-labels  Show all labels
    help         Show help

Run 'fugu help COMMAND' for more information on a command.

run/build/exec/destroyなどが可能で、fugu.yml以外のファイルも指定できますので同じディレクトリに起動するDockerコンテナの設定をまとめて管理することもできます。なお、fuguはFigのようなオーケストレーションツールを目指している訳ではなく、起動や終了の設定をシンプルにしたいだけのようです。

Dockerを使うのに慣れてきたらfuguを使って設定をシンプルに管理できるようにしても良さそうです。コマンドラインですべて設定を指定するとミスが発生するかも知れないので、fuguでラッピングすると運用が楽になるでしょう。

mattes/fugu