こんにちわ
最近dockerを使っていて、
ターミナル上で直感的にdockerを簡単に操作できるツールあったら便利だなと思い、
Goの勉強も兼ねてCUIツールを作りました。
ツール名はdocui(ドックユーアイ)で、docker cuiをの略です。
特に良い名前思いつかず、適当に決めましたが、今となっては気に入っています。
まだdockerコマンドほど機能は充実していないのですが、よく使うコマンドは実装したので公開しました。
興味ある方は使って見て頂ければと思います。
今後は少しずつ改善・機能を増やしていくので、
使ってみた感想などを頂けると助かります。
2018/09/26 追記
docuiの実装について記事を書きました。
アジェンダ
コンセプト
- コマンドを打つのがめんどい
- コマンドを覚えるのがめんどくさい
- もっと高速で操作したい
- 初心者でも直感的に操作したい
これらを解決するためのツールです。
docker start container
をu
キーを押すだけでコンテナを起動するなど、
ショートカットを使って、より簡単かつ直感的に操作できる様にを目標にして作っています。
導入方法
導入する上で必要なツールは以下になります。
下記は動作済みのバージョンとなっています。
- 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の操作も対応していく予定です。
各パネルの概要
READMEとwikiに使い方を書いてありますので、ここでは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 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
パネルで操作する必要がある。
-
イメージ削除(-f dangling=true)
ビルド過程でできる<none>
というようなイメージかつ使用されていないイメージを削除。
n
で削除をキャンセル。
container list
-
コンテナの状態更新
5秒間隔でコンテナの状態が更新される。 -
コンテナcommit
docker commit
と同等。
指定したコンテナをイメージに保存する。
tagを省略するとlatest
になる。
-
コンテナ詳細
docker inspect
と同等。
コンテナの詳細をdetail
パネルで確認することができる。
スクロールしたい場合は、detail
パネルで操作する必要がある。
volume list
-
ボリューム作成
docker volume create
と同等。
※ラベルやオプションを複数追加したい場合はスペース区切りで入力する。
-
ボリューム削除(prune)
docker volume prune
と同等。
使用していないボリュームをすべて削除する。
detail
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
を除き、docker
とpanel
とcommon
の3つになっています。
-
docker
dockerを操作の役割を持つ。 -
common
全体で使用するような関数などを持つ。 -
panel
画面描写・更新・キーバインドなど、画面に関する操作の役割を持つ。
そのため、メインの処理はこのパッケージに詰まっている。
ちなみに、docuiで使用しているライブラリは以下2つです。
-
gocui
cuiライブラリです。
主に画面生成と描写・キーバインド設定を使っています。
非同期の描写更新もサポートしていますが、
プログレスバーといったリアルタイム更新はなぜかうまく動作しませんでした。
gocui自体はキーバインドライブラリとしてtermbox-goというのを使用していて、
キーイベント処理はtermbox-goが担っています。 -
docker-client
dockerクライアントライブラリです。
dockerに関する操作はこちらを通して行っています。
公式のmobyプロジェクトがあるので、将来的にmobyに移行しようと考えています。
ソースはgithubにあげてありますので、
興味ある方はぜひ見てみてください。
アドバイス頂けると喜びます。
最後に
今回はざっくりツールについて紹介しました。
dockerを使って開発を行っている方など、ぜひ使ってみてください。
フィードバックもお待ちしております。
次回は実際作った時に躓いた箇所について記事を書きます。
docui自体はシンプルなので、そんなに書くことはないのですが、
自分の備忘録も兼ねて記事にしようと考えています。