docker volumeの名前がハッシュ値のものを一括削除する
普段開発環境はdockerを使っています。dockerを使って開発していくとvolume名が64桁のハッシュ値のものがどんどん増えていきディスクを圧迫していきます。ディスクの容量がいっぱいになると、dockerの起動がしなくなったりして開発に支障が出たことがありました。それからはこまめに削除していますが、volume名がハッシュ値のものを一括で削除するスために下記スクリプトで削除しています。
$ docker volume ls | awk 'length($2)==64 {print $2}' | xargs docker volume rm
下記にそれぞれのコマンドの内容を簡単に記載しておきます。
docker volume ls
docker volume ls
により全てのvolumeを表示する。
1列目はdriver
が表示され、2列目がvolume name
が表示される。
$ docker volume ls DRIVER VOLUME NAME local 0b54333e1df6786dec2c213dae87d10ccc75a85ceade2498cc6abbed140c5ab9 local 2f87d4b910d4dae508c04edb7d004a7aecc1eddc7dc0e60d92d29306f7346279 local 3ee8993cda4164ab5e764ea7a097bd67cb0e4bc3b3702073a957c58c4c64dc59 local pgsql-data
awk
awk
コマンドにより上記のdocker volume ls
で出力された結果を加工する。
awk
コマンドは空白やカンマなどで区切られたテキストを処理できるコマンドである。文字列を検索したり、文字列を抜き出したりすることが可能である。
今回の場合、文字列を検索しているはlength($2)==64
の箇所である。これは2列目の文字の長さが64文字のものを検索している。
そして{print $2}
で2列目を抜き出している
$ docker volume ls | awk 'length($2)==64' DRIVER VOLUME NAME local 0b54333e1df6786dec2c213dae87d10ccc75a85ceade2498cc6abbed140c5ab9 local 2f87d4b910d4dae508c04edb7d004a7aecc1eddc7dc0e60d92d29306f7346279 local 3ee8993cda4164ab5e764ea7a097bd67cb0e4bc3b3702073a957c58c4c64dc59 $ docker volume ls | awk '{print $2}' 0b54333e1df6786dec2c213dae87d10ccc75a85ceade2498cc6abbed140c5ab9 2f87d4b910d4dae508c04edb7d004a7aecc1eddc7dc0e60d92d29306f7346279 3ee8993cda4164ab5e764ea7a097bd67cb0e4bc3b3702073a957c58c4c64dc59 pgsql-data $ docker volume ls | awk 'length($2)==64 {print $2}' 0b54333e1df6786dec2c213dae87d10ccc75a85ceade2498cc6abbed140c5ab9 2f87d4b910d4dae508c04edb7d004a7aecc1eddc7dc0e60d92d29306f7346279 3ee8993cda4164ab5e764ea7a097bd67cb0e4bc3b3702073a957c58c4c64dc59
xargs
標準入力からコマンドラインを構築して実行することができる。例えばcommandA | xargs commandB
でcoomandA
で実行した結果をcommandB
の引数としてcommandB
を実行する。
今回のスクリプトでは| xargs docker volume rm
としているのでawkコマンドで得られた64桁のvolume名をdocker volume rm
に引数として渡している。docker volume rm volume名
でvolume名
のvolumeを削除する。