0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Dockerのリソースを一括削除するエイリアス

Last updated at Posted at 2021-06-19

Dockerを学習中で、[コンテナ, イメージ, ボリューム, ネットワーク]
といったリソースを一括削除したいときがあったので、エイリアスを作りました。

準備

.bashrc に 以下を追記します。

.bashrc
#===============================================================================
# Add docker alias
#===============================================================================
alias dps='docker ps -a'
alias dv='docker volume ls'
alias di='docker images'
alias dn='docker network ls'

alias dpr=_dockerRemoveResources
function _dockerRemoveResources() {
    if [ "$1" = "prn" ]; then
        _dockerRemovePrune
    elif [ "$1" = "con" ]; then
        _dockerRemoveContainers
    elif [ "$1" = "img" ]; then
        _dockerRemoveImages
    elif [ "$1" = "vol" ]; then
        _dockerRemoveVolumes
    elif [ "$1" = "net" ]; then
        _dockerRemoveNetworks
    elif [ "$1" = "all" ]; then
        _dockerRemoveAllForce
    else
        echo 'need target: [prn, con, vol, img, all]'
    fi
}

function _dockerRemovePrune() {
    docker container prune -f
    docker container ps -a
    docker volume prune -f
    docker volume ls
    docker image prune -f
    docker image ls
    docker network prune -f
    docker network ls
}

function _dockerRemoveContainers() {
    echo -e "\n[Containers]"
    remove_targets=`docker container ps -aq`
    test -n "$remove_targets" && docker rm -f $remove_targets
    docker container ls
}
function _dockerRemoveImages() {
    echo -e "\n[Images]"
    remove_targets=`docker image ls -q`
    test -n "$remove_targets" && docker image rm -f $remove_targets
    docker image ls
}
function _dockerRemoveVolumes() {
    echo -e "\n[Volumes]"
    remove_targets=`docker volume ls -q`
    test -n "$remove_targets" && docker volume rm -f $remove_targets
    docker volume ls
}
function _dockerRemoveNetworks() {
    echo -e "\n[Networks]"
    docker_network_list=`docker network ls | awk 'NR>1 {print $2}'`
    remove_targets=`echo -e "${docker_network_list}" | grep -v -e '^bridge$' -e '^host$' -e '^none$'`
    test -n "$remove_targets" && docker network rm $remove_targets
    docker network ls
}
function _dockerRemoveAllForce() {
    _dockerRemoveContainers
    _dockerRemoveImages
    _dockerRemoveVolumes
    _dockerRemoveNetworks
}


使い方

dpr [削除するリソース]

# すべて削除(危険)
dpr all

# 使ってないものだけ削除
dpr prn

# コンテナだけ削除
dpr con

# イメージだけ削除
dpr img

内容について

[コンテナ, イメージ, ボリューム, ネットワーク] で
4つすべてか、1つだけ選んで削除できるようにしています。

リソースとメソッドの対応

リソース メソッド
コンテナ _dockerRemoveContainers
イメージ _dockerRemoveImages
ボリューム _dockerRemoveVolumes
ネットワーク _dockerRemoveNetworks

7行目まで

dps, di, dv, dn は
各リソースを表示するエイリアスです。お好みの名前で登録してください。

8行目以降

dpr こいつが一括削除するエイリアスです。
エイリアスに対して、_dockerRemoveResources() という関数を登録してます。

_dockerRemoveResources()の中で、
リソースに対応したメソッドを呼び出しています。

_dockerRemoveNetworks について

デフォルトネットワーク(bridge, host, none) は
削除できなかったり、エラー出たりするので、grep -v してます。

備考

Dockerコマンドが長くてめんどい場合は、
Makefileを書いて楽しようみたいな情報が出てきましたが、
使いどころがあんまりよくわからなかったです。

bash-completion入れてたら、
コマンドライン補完が使えるので、入れると幸せになれるかもしれません。
docs.docker.jp | コマンドライン補完

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?