【Docker】Dockerのいらないものを削除する!

どーも!

たかぽんです!

今回はDockerのお掃除に使えるコマンドをメモしていこうと思います...!

っというのも、先日local環境が変になって、その過程で一旦ぜーんぶ綺麗にしちゃおー!ってなって調べたので...

では早速いきましょう!

ちなみに、今回書いている内容は基本的に公式のリファレンスに載っているので、是非お時間のある時一読することをお勧めしておきます...!

事前に確認

さて、まずは一通り確認をしておきます。

// 停止済みを含めたコンテナの確認(どっちでもOK)
docker ps -a
docker container ls -a

// imageの一覧を確認
docker images

// volumeの一覧を確認
docker volume ls

// networkの一覧を確認(IDは省略しない)
docker network ls --no-trunc

使っていないものを削除

確認を終えたので、まずは使っていないものの削除をみていきます...!

// 停止しているコンテナの削除
docker container prune

// imageを全削除
docker image prune -a

// volumeを全削除
docker volume prune

// ネットワークの削除
docker network prune

// 上記全て削除(volumeは含めない)
docker system prune

// 上記全て削除(volumeも含める)
docker system prune -a --volumes

pruneはデフォルトだとvolumeの削除が行われないようなので、念の為二つ書いておきました。

以下、pruneコマンドの説明の一部の引用です。

By default, volumes are not removed to prevent important data from being deleted if there is currently no container using the volume. Use the --volumes flag when running the command to prune volumes as well:

Docker CLI

使っているものも削除

さて、使っていないものの削除はざっと確認できたので、次は使っているものも削除していきます。

基本的にrmコマンドを使って削除するのですが、一括で...といったオプションは今のところなさそうです。

そのため、コマンド側で引数として指定して実現していきます。

(以下のブログを参考にさせていただきました...!)

// コンテナを全て停止&コンテナを全て削除
docker stop $(docker ps -aq) && docker rm $(docker ps -aq)

// imageを全削除 (どっちでもOK)
docker rmi $(docker images -q)
docker image rm $(docker images -q)

// volumeを全削除
docker volume rm $(docker volume ls -q)

// networkの削除
docker network rm $(docker network ls -q)

時系列上から順に実行していただければおそらく大丈夫かとは思いますが、もしもimageやvolumeの削除をしている際にエラーが出る場合は動いているコンテナだったり、止まったまま(削除されていない)コンテナなどが参照している可能性があります。

一応、rmコマンド群は"-f"で強制削除は可能ですが、理想はちゃんとコンテナを全て削除してから順々に消していくのが良いと思います。

また、docker system pruneのように一括での削除...っぽいコマンドはなさそうでした...!

まとめ

今回は一通りDockerのLocalで便利そうなコマンドをザーッと出しました...!

Dockerの不調って案外よくありますよね...

大抵は再度build等すれば治ったりするんですが、たまに引っかかると本当に悩まされる...w

最終的にはDocker for macのrestartやらPC再起動まで行きがちですが...

でも今回初めてDocker CLIの細かい説明を追いかけたので、今度暇があれば他のあまり詳しくみれていないコマンドも読んでみようと思います!

それでわ!

おすすめの記事