BETA

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

投稿日:2018-10-14
最終更新:2018-10-24
※この記事は外部サイト(https://qiita.com/gorilla0513/items/814f36...)からのクロス投稿です

こんにちわ

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

ツール名は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 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する。

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

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

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

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

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

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

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

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

container list

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

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

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

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

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

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

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

volume list

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

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

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

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

detail

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

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自体はシンプルなので、そんなに書くことはないのですが、 自分の備忘録も兼ねて記事にしようと考えています。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@gorillaの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!