Help us understand the problem. What is going on with this article?

dockerコンテナの起動・停止をちょっと楽にするシェル関数

More than 1 year has passed since last update.

dockerコンテナの起動と停止するたびに名前の指定が面倒になってきたので、fzfを使ってシェル関数を作った。

※私はたまたまpecoよりfzf派なだけなのでpeco派の人は適宜書き換えていただければいいかと。

※私はシェル関数を~/.zshrcに追記してます。

docker-start

image.gif

起動していないコンテナを選んでからスタートさせる。

docker-start() {
  local container
  container="$(docker ps -a -f status=exited | sed -e '1d' | fzf --height 40% --reverse | awk '{print $1}')"
  if [ -n "${container}" ]; then
    echo 'starting container...'
    docker start ${container}
  fi
}

docker-stop

image.gif

起動しているコンテナを選んでからストップさせる。

docker-stop() {
  local container
  container="$(docker ps -a -f status=running | sed -e '1d' | fzf --height 40% --reverse | awk '{print $1}')"
  if [ -n "${container}" ]; then
    echo 'stopping container...'
    docker stop ${container}
  fi
}

docker-exec-bash

image.gif

コンテナにbashでつなぐ。
(bashでつなぐことがよくあるので、ついでに作った。)

docker-exec-bash() {
  local container
  container="$(docker ps -a -f status=running | sed -e '1d' | fzf --height 40% --reverse | awk '{print $1}')"
  if [ -n "${container}" ]; then
    docker exec -it ${container} /bin/bash
  fi
}

docker-logs

コンテナの直近のログを見る。

docker-logs() {
  local container
  container="$(docker ps -a -f status=running | sed -e '1d' | fzf --height 40% --reverse | awk '{print $1}')"
  if [ -n "${container}" ]; then
    docker logs -f --tail 100 ${container}
  fi
}

docker-rm

起動していないコンテナを選んでから削除させる。

docker-rm() {
  local container
  container="$(docker ps -a -f status=exited | sed -e '1d' | fzf --height 40% --reverse | awk '{print $1}')"
  if [ -n "${container}" ]; then
    echo 'removing container...'
    docker rm ${container}
  fi
}

docker-rmi

(追記)ディスクいっぱいになってイメージ削除するときにも使えた。

docker-rmi() {
  local image
  image="$(docker images -a | sed -e '1d' | fzf --height 40% --reverse | awk '{print $3}')"
  if [ -n "${image}" ]; then
    echo 'removing container image...'
    docker rmi ${image}
  fi
}

参考

fzfのExamplesを参考にしました。
https://github.com/junegunn/fzf/wiki/Examples

sameyasu
fancs
日本最大規模の広告配信プラットフォームを開発しているアドテクノロジーエンジニアチームです
https://www.fancs.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away