docker+pecoでコンテナ(イメージ)操作


#alias docker='sudo docker'

# pecoで選択したコンテナに対して操作を行う
docker_peco_containers() {

  if [ $# -lt 1 ]; then
    echo "Usage: dpc [OPTIONS] COMMAND [args]" >&2
    return 1
  fi

  docker ps -a | peco | while read CONTAINER
  do
    docker $@ `echo $CONTAINER | awk '{print $1}'`
  done

}

# pecoで選択したイメージに対して操作を行う
docker_peco_images() {

  if [ $# -lt 1 ]; then
    echo "Usage: dpi [OPTIONS] COMMAND [args]" >&2
    return 1
  fi

  unset DOCKER_OPTS

  [[ -z $ENVS ]] || \
    for e in $ENVS; do DOCKER_OPTS="$DOCKER_OPTS -e $e"; done

  [[ -z $VOLUMES ]] || \
    for v in $VOLUMES; do DOCKER_OPTS="$DOCKER_OPTS -v $v"; done

  [[ -z $PORTS ]] || \
    for p in $PORTS; do DOCKER_OPTS="$DOCKER_OPTS -p $p"; done

  docker images | peco | while read IMAGE
  do
    docker $DOCKER_OPTS $@ `echo $IMAGE | awk '{print $3}'`
  done

}

# ついでに一括削除系(peco関係なし)
docker_container_all_clear() {
  echo "Dockerコンテナを削除中..."
  docker kill `docker ps -q`
  docker rm `docker ps -aq`
  echo "すべてのコンテナを削除しました。"
}

# エイリアスはお好みで
alias dpc='docker_peco_containers'
alias dpi='docker_peco_images'
alias dcac='docker_container_all_clear'

これを.bashrcなり/etc/profile.d/docker-peco.shなりに書いておいて以下のように使う。

コンテナの停止、削除

dpc kill; dpc rm

コンテナの起動 (例: Rails+MySQL)

ENVS="RAILS_ENV=production" PORTS="3000:80 3306:3306" VOLUMES="/data:/var/lib/mysql" dpi -d run

イメージの削除

dpi rmi

Dockerの操作がちょっとだけ捗る。