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