peco で Docker の container ID を楽に選択する alias


Docker 使っていると割りと container ID が必要になるケース多いと思います。
このとき一々 docker ps から container ID を探し出してコピペするのが面倒だったので、alias を定義しました。

alias -g P='`docker ps | tail -n +2 | peco | cut -d" " -f1`'

docker ps の結果を peco で絞り込みます。
これだと起動しているコンテナの ID しか取れないので、停止中のも取りたい場合は -a オプションを付ければよいです。

peco に渡す前に tail -n +2 を噛ませていますが、これは「頭から2行目以降を出力する(= 先頭行を飛ばして出力する)」というコマンドです。
docker ps は先頭行にフィールド名ヘッダが入るので、これを除去しています。

コンテナ停止

$ docker stop P

コンテナのログを見る

$ docker logs P

nsenter を使ってコンテナに入る

予め nsenter を使えるようにしておき、.bashrc や .zshrc で docker-enter コマンドを定義しておく。

$ docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter

OS X で boot2docker 経由の docker-enter を参考までに載せておきます。

docker-enter() {
  boot2docker ssh '[ -f /var/lib/boot2docker/nsenter ] || docker run --rm -v /var/lib/boot2docker/:/target jpetazzo/nsenter'
  boot2docker ssh -t sudo /var/lib/boot2docker/docker-enter "$@"
}

以上設定したら、以下のコマンドでコンテナに attach できる。

$ docker-enter P

docker exec でコンテナ内プロセス実行 (>= Docker 1.3)

最近 Docker 1.3 が出て docker exec コマンドが定義されました。便利!!!!

例えばコンテナ内のプロセス一覧を確認したい場合、

$ docker exec P ps -ef

See also

dot.zsh/.zshrc.peco - dtan4/dot.zsh
¯