pecoでdocker exec を快適にする
Dockerを使って開発していると、docker execすることが結構あると思いますが、地味に面倒なのでpecoを使って簡単に出来るようにしてみました。
pecoを使う前はこんな感じでdocker exec していると思います。
pecoを使うとこんな感じになります。
1文字打つだけでコンテナに入れます、早くて楽で良いですよね。
それでは設定していきたいと思います。
まずpecoをインストールします。
※今回はbrewを前提にしてますので、brewが使えない場合は別途brewをインストールしてください。(windowsの人はbrewないので手順変わります、ごめんなさい)
brew install peco
これだけでpecoが使えるようになります。pecoは別のコマンドの結果を受け取って選択できるようにしてくれる、そして選択した結果だけを返してくれるコマンドになります。
pecoが使えるようになったので、次のステップに行きます。
docker exec する際にコンテナIDが必要になるので、docker ps の結果からpecoで選択した行のコンテナIDを取得する。をやりたいと思います。
まず「docker ps の結果からpecoで選択した行」までのところは以下のコードになります。docker ps の結果を |(パイプ)でpecoに渡して上げればOKです
$ docker ps | peco
dce26af62758 sample-ph3-quizy_app "docker-php-entrypoi…" 3 days ago Up 15 minutes 9000/tcp sample-ph3-quizy_app_1
こうすると選択した行だけの情報が取得できるようになります。
次は「docker ps の結果からpecoで選択した行のコンテナIDを取得する」までやります。
docker psの結果はコンテナIDの他に、イメージ コマンド などの情報も一緒に取得しちゃうので、コンテナIDだけ抜き出すという処理を書きます。
awkというコマンドを使って、スペース区切りの文字列の1つ目を取得。とすることでコンテナIDが取得で聞きます。コードは以下のようになります。
$ docker ps | peco | awk "{print \$1}"
dce26af62758
欲しい情報が取れたので、あとはdocker exec に上手いこと渡して上げれば行けます。
docker exec コマンドを書いて、コンテナIDが入って欲しい所に先程のコマンドを入れてみます。コンテナIDを取得する所が先に動いてほしいので$()で囲って上げればOKです。コードは以下のようになります
$ docker exec -it $(docker ps | peco | awk "{print \$1}") bash
root@dce26af62758:/work/backend#
これで対象のコンテナを選択するだけで入れるようになりました。
毎回この長いコマンド打つのが面倒なので、alias(windowsの人は手順変わります、ごめんなさい)を設定します。
先程作った長いコマンドを、dというコマンドで登録して、d と打つだけでコンテナに入れるようにします。
$ alias d='docker exec -it $(docker ps |peco|awk "{print \$1}") bash'
$ d
root@dce26af62758:/work/backend# exit
$ d
root@d5aeefadd2b9:/#
これでdコマンドでコンテナに入れるようになりました。
ですが、ターミナルを新しく起動するとdコマンドが使えなくなっちゃいます。
これだと毎回aliasコマンドを実行しないといけないので、これも設定していきます。
設定としては、ターミナル起動時に自動的にaliasコマンドが実行されるようにします。
bash、zshなどシェルによって設定対象のファイルが変わってくるので、自分が使っているシェルの種類を確認します
$ echo $SHELL
/bin/bash # bashの場合
/bin/zsh # zshの場合
これで自分が使っているシェルの種類がわかるので、シェルに合わせた設定ファイルを修正します。(ファイルが存在しない場合もありますが、vi で新規作成しちゃって大丈夫です)
# bashの場合
vi ~/.bashrc
# zshの場合
vi ~/.zshrc
上記ファイルにaliasコマンドを書きます。
alias d='docker exec -it $(docker ps |peco|awk "{print \$1}") bash'
これでターミナル新しく起動しても、dコマンドが利用できるようになっているはずです!快適なDockerライフをどうぞ!!
_φ(・_・
その他Docker関係で、aliasに登録しておくと良さそうなコマンド書いておきます
alias d='docker exec -it $(docker ps | peco | awk "{print \$1}") bash'
alias ds='docker stop $(docker ps | peco | awk "{print \$1}")'
alias dl='docker log $(docker ps | peco | awk "{print \$1}")'
alias dp='docker ps'
alias dr='docker run $1'
alias dcu='docker-compose up -d'
alias dcb='docker-compose build'
alias dcbn='docker-compose build --no-cache'
alias dcl='docker-compose logs'
# docker-compose downとは違う、動いてるコンテナをとりあえず全部止める
alias dcd='docker stop $(docker ps -q)'
# bashが使えないコンテナの場合はこちらのコマンドを使う
alias dsh='docker exec -it $(docker ps | peco | awk "{print \$1}") sh'