Dockerをクリーンアップ
August 4, 2020
TL;DR #
以下コピペで実行。
for i in $(docker ps -a --format '{{ .ID }}'); do docker rm $i; done
for i in $(docker volume ls --format '{{ .Name }}'); do docker volume rm $i; done
for i in $(docker network ls --format '{{ .Name }}'); do docker network rm $i; done
ユースケース #
ローカルでDocker利用していて、ふと docker ps -a
とか見るとゴミが大量に出てきてクリーンアップしたい!という話。
docker ps の CONTAINER ID
だけ列挙したい
#
--format
を使う。
$ docker ps --help | grep format
--format string Pretty-print containers using a Go template
Go template で書式設定できると。 {{ .ID }}
と書くと CONTAINER ID に置換されると。
$ docker ps -a --format '{{ .ID }}'
88f197add92a
c384983f2890
9f783fb9c5e2
ae67cca4faed
3f36ce6429a6
443fc5adc821
列挙した ID を for 文ループして削除 #
これで最初のスクリプトが出来上がる。
$ for i in $(docker ps -a --format '{{ .ID }}'); do docker rm $i; done
template で使える値 #
ドキュメントに書いてある。
https://docs.docker.com/engine/reference/commandline/ps/#formatting
覚え方としては docker ps
で出てくるヘッダに対しては、
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
CONTAINER ID
と CREATED
以外は先頭だけ大文字のキャメルケース、 CONTAINER ID
は .ID
、 CREATED
は CreatedAt
で suffix が付くといった感じ。
$ docker ps -a --format '{{.ID}},{{.Image}},{{.Command}},{{.CreatedAt}},{{.Status}},{{.Ports}},{{.Names}}'
volume と network もクリーンアップ #
それぞれ docker volume
コマンドと docker network
コマンドで値列挙と削除を行う。
for i in $(docker volume ls --format '{{ .Name }}'); do docker volume rm $i; done
for i in $(docker network ls --format '{{ .Name }}'); do docker network rm $i; done
終わりに #
他にもクリーンアップすべきリソースがあるかもだけど、 docker コマンド駆使すれば大丈夫でしょう。