LoginSignup
332
236

More than 5 years have passed since last update.

Goで直感的に簡単にdockerを操作できるCUIツール[docui]を作りました

Last updated at Posted at 2018-09-24

こんにちわ

最近dockerを使っていて、
ターミナル上で直感的にdockerを簡単に操作できるツールあったら便利だなと思い、
Goの勉強も兼ねてCUIツールを作りました。

docui-demo.gif

ツール名はdocui(ドックユーアイ)で、docker cuiをの略です。
特に良い名前思いつかず、適当に決めましたが、今となっては気に入っています。

まだdockerコマンドほど機能は充実していないのですが、よく使うコマンドは実装したので公開しました。
興味ある方は使って見て頂ければと思います。

今後は少しずつ改善・機能を増やしていくので、
使ってみた感想などを頂けると助かります。

2018/09/26 追記
docuiの実装について記事を書きました。

アジェンダ

コンセプト

  • コマンドを打つのがめんどい
  • コマンドを覚えるのがめんどくさい
  • もっと高速で操作したい
  • 初心者でも直感的に操作したい

これらを解決するためのツールです。

docker start containeruキーを押すだけでコンテナを起動するなど、
ショートカットを使って、より簡単かつ直感的に操作できる様にを目標にして作っています。

導入方法

導入する上で必要なツールは以下になります。
下記は動作済みのバージョンとなっています。

  • Go Ver.1.11
  • Docker Engine Ver.18.06.1-ce
  • Git

すでに環境整っている方は以下の手順でインストールできます。

$ git clone https://github.com/skanehira/docui
$ cd docui
$ go install

各ツールを含めた具体的の導入手順はこちらを見て頂ければと思います。
一つ注意点として、現時点docuiはunixドメインソケットにのみ対応しているため、tcpが動作しているdocker engineには接続できないです。
将来的にリモートでdocker engineの操作も対応していく予定です。

各パネルの概要

READMEwikiに使い方を書いてありますので、ここではdocuiの画面について説明していきます。

image.png

基本的以下のパネル構成と操作になります。

  • image list
    • イメージ一覧(docker images)
    • イメージ検索(docker search)
    • 取得(pull)
    • コンテナ作成(docker create)
    • 削除(docker rmi)
    • 削除(docker rmi -f dangling=true)
    • インポート(docker import)
    • 保存(docker save)
    • ロード(docker load)
    • 詳細(docker inspect)
  • container list
    • コンテナ一覧(docker ps --all)
    • 起動(docker start)
    • 停止(docker stop)
    • 削除(docker rm)
    • イメージに保存(docker commit)
    • エクスポート(docker export)
  • volume list
    • ボリューム一覧(docker volume list)
    • ボリューム作成(docker volume create)
    • ボリューム削除(docker volume rm)
    • ボリューム削除(docker volume prune)
  • detail
    • イメージ/コンテナ/ボリュームの詳細表示(docker inspect結果)
  • navigate
    • 各パネルで使用できるキーマップの表示

各パネルの操作

各パネルでのどんな操作ができるかについて説明していきます。

image list

  • イメージ取得
    docker pullと同等。
    イメージ名を入力してpullする。
    image.png

  • イメージ検索
    docker searchと同等。
    イメージ名を入力して検索する。
    検索結果が表示されるので、一覧からイメージを選択してEnterでイメージをpullする。
    image.png

  • イメージ保存
    docker saveと同等。
    指定したイメージを保存する。
    ファイルパスは相対パスか絶対パスでなければいけない。
    image.png

  • イメージimport
    docker importと同等。
    ファイルとイメージ名を指定してイメージをimportする。
    ファイルパスは相対パスか絶対パスでなければいけない。
    import時のtagを省略するとlatestになる。
    image.png

  • イメージload
    docker loadと同等。
    指定したファイルをloadする。
    ファイルパスは相対パスか絶対パスでなければいけない。
    image.png

  • コンテナの作成
    docker createと同等。
    選択したイメージをもとにコンテナを作成する。
    環境変数と起動コマンドを複数設定したい場合は,区切りで入力する。
    設定値に環境変数を使用した場合はOSの値を取得してセットする。
     例:PATH=$PATH:$GOPATH
    現時点でポートとボリュームの複数マッピングはできないが、今後それを可能にしていく。
    image.png

  • イメージ詳細
    docker inspectと同等。
    イメージの詳細をdetailパネルで確認することができる。
    スクロールしたい場合は、detailパネルで操作する必要がある。
    image.png

  • イメージ削除
    docker rmiと同様。
    指定したイメージを削除する。
    nで削除をキャンセル。
    image.png

  • イメージ削除(-f dangling=true)
    ビルド過程でできる<none>というようなイメージかつ使用されていないイメージを削除。
    nで削除をキャンセル。
    image.png

container list

  • コンテナの状態更新
    5秒間隔でコンテナの状態が更新される。

  • コンテナ起動
    docker startと同等。
    指定したコンテナを起動する。
    image.png

  • コンテナ停止
    docker stopと同等。
    指定したコンテナを停止する。
    image.png

  • コンテナexport
    docker exportと同等。
    指定したコンテナをexportする。
    image.png

  • コンテナcommit
    docker commitと同等。
    指定したコンテナをイメージに保存する。
    tagを省略するとlatestになる。
    image.png

  • コンテナ削除
    docker rmと同等。
    指定したコンテナを削除する。
    nで削除をキャンセル。
    image.png

  • コンテナ詳細
    docker inspectと同等。
    コンテナの詳細をdetailパネルで確認することができる。
    スクロールしたい場合は、detailパネルで操作する必要がある。
    image.png

volume list

  • ボリューム一覧
    docker volume listと同等。
    5秒間隔で更新される。
    image.png

  • ボリューム作成
    docker volume createと同等。
    ※ラベルやオプションを複数追加したい場合はスペース区切りで入力する。
    image.png

  • ボリューム削除
    docker volume rmと同等。
    image.png

  • ボリューム削除(prune)
    docker volume pruneと同等。
    使用していないボリュームをすべて削除する。
    image.png

detail

  • イメージ/コンテナ/ボリュームの詳細表示
    イメージ、コンテナ、ボリュームの中身によっては、画面に収まらない場合がある。
    その場合はjkでカーソル移動もしくはduでページ移動して内容を確認できる。
    detail.gif

docui構成

ディレクトリ構成は以下になっています。

docui
├── LICENSE
├── README.md
├── build
│   ├── Dockerfile
│   └── build.sh
├── common
│   └── common.go
├── docker
│   └── docker.go
├── main.go
├── panel
│   ├── containerPanel.go
│   ├── detailPanel.go
│   ├── gui.go
│   ├── imagePanel.go
│   ├── infoPanel.go
│   ├── inputPanel.go
│   ├── navigatePanel.go
│   ├── searchImagePanel.go
│   ├── searchImageResultPanel.go
│   └── volumePanel.go
└── wiki.md

パッケージはmainを除き、dockerpanelcommonの3つになっています。

  • docker
    dockerを操作の役割を持つ。

  • common
    全体で使用するような関数などを持つ。

  • panel
    画面描写・更新・キーバインドなど、画面に関する操作の役割を持つ。
    そのため、メインの処理はこのパッケージに詰まっている。

ちなみに、docuiで使用しているライブラリは以下2つです。

  • gocui
    cuiライブラリです。
    主に画面生成と描写・キーバインド設定を使っています。
    非同期の描写更新もサポートしていますが、
    プログレスバーといったリアルタイム更新はなぜかうまく動作しませんでした。
    gocui自体はキーバインドライブラリとしてtermbox-goというのを使用していて、
    キーイベント処理はtermbox-goが担っています。

  • docker-client
    dockerクライアントライブラリです。
    dockerに関する操作はこちらを通して行っています。
    公式のmobyプロジェクトがあるので、将来的にmobyに移行しようと考えています。

ソースはgithubにあげてありますので、
興味ある方はぜひ見てみてください。

アドバイス頂けると喜びます。

最後に

今回はざっくりツールについて紹介しました。
dockerを使って開発を行っている方など、ぜひ使ってみてください。
フィードバックもお待ちしております。

次回は実際作った時に躓いた箇所について記事を書きます。
docui自体はシンプルなので、そんなに書くことはないのですが、
自分の備忘録も兼ねて記事にしようと考えています。

332
236
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
332
236