Dockerを学習中で、[コンテナ
, イメージ
, ボリューム
, ネットワーク
]
といったリソースを一括削除したいときがあったので、エイリアスを作りました。
準備
.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 | コマンドライン補完