Dockerとtmuxを連携するdmuxというツールをつくった
Docker + tmux = dmux !
dmuxを使うと現在起動中のtmuxのwindowにおいて,新しくpaneをつくりそこでDockerコンテナを起動することができる.使い捨て,かつ高速に起動するクリーンな環境でコマンドを試したり,ツールを入れて使ってみたりなどといったことができる.また,プロセスと途中で止めて,後にそれを再開することもできる.
デモ
以下は簡単な動作例.
上のデモでは,以下のことが可能であることを示している.
dmux init
により新しいpaneでコンテナを起動し,そこにアタッチするdmux stop
でプロセスを停止してpaneを削除するdmux start
で停止したプロセスを再開(for
文のカウントが途中から再開している)し,新しいpaneで再びコンテナにアタッチするdmux delete
でコンテナとpaneを削除する
なぜつくったか
Dockerのv0.12.0で追加されたpause
,unpause
コマンドの検証と,それによってどのようことができそうかを探求するためにつくった.
そもそもDockerには,stop
とstart
というコマンドがある.これらは,コンテナの停止と起動のために使われる.具体的にはstop
を実行すると,コンテナにはSIGTERM
とSIGKILL
が送られコンテナはシャットダウンする.そしてstart
を実行すると停止したコンテナが再起動する.
それと異なりpause
は,cgroup freezerにより,コンテナを停止する.つまり,pause
を使うとプロセスの実行を一時停止,再開することができるようになる.
pause
を使えばライブマイグレーションができるのでは,といろいろ試してみたが,まだまだその土壌はなく断念した.それでもこれは面白い機能なので,何かできないかということで今回の実装に至った.実際,上のデモにおけるfor
文の停止とその再開はこのpause
を使って実現している.
また,dotcloudのjpetazzoさんが,CRIU(”Checkpoint Restart In Userspace”)を使って似たようなツールをつくっており,それにインスパイアされている.
dmuxの機能
pause
とunpause
で遊ぶだけでなく,ある程度使えるツールにはしてある(つもり).上のデモの内容に加えて以下のことできる.
dmux init
ではデフォルトでubuntu
イメージが使われるが,-i
オプションで好きなイメージを指定することができる.つまり,作成したイメージの軽い検証に使える.dmux save
を使うといろいろ試したコンテナをイメージとして保存することができる.
詳しい使い方はREADMEを参照.
インストール
go get
でインストールできる.
1
|
|
バグは@deeeet,もしくはGithubのIssueにお願いします.