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にお願いします.