Edited at

一発ですべてのDockerコンテナを停止・削除、イメージの削除をする

More than 1 year has passed since last update.

起動しているすべてのDockerコンテナの停止や削除をするときに使っているコマンドが便利なので紹介したいと思います。

紹介するコマンドはDocker For Macで実行し確認しました。


TL;DR


  • 全コンテナ停止: docker stop $(docker ps -q)

  • 全コンテナ削除: docker rm $(docker ps -q -a)

  • 全イメージ削除: docker rmi $(docker images -q)


すべてのコンテナを停止する

docker stop $(docker ps -q)

docker stopに関しては説明不要かと思います。

$(docker ps -q)の部分に関してですが、

docker ps-qフラグを付けることでコンテナのIDのみを取得します。

例えば、以下のように起動しているコンテナがある場合

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

e2d41562fb71 ubuntu "/bin/bash" 39 hours ago Up 13 seconds affectionate_bassi
d886772499bd ubuntu "/bin/bash" 45 hours ago Up 12 seconds gallant_curran
96b81bf5c03d alpine "/bin/sh" 47 hours ago Up 11 seconds cocky_chebyshev

docker ps -qを実行すると以下のようにコンテナIDのみ表示されます。

e2d41562fb71

d886772499bd
96b81bf5c03d

このコンテナIDのみ取得する方法を利用しています。

docker stop $(docker ps -q)

は以下を実行しているのと同じです。



docker stop e2d41562fb71 d886772499bd 96b81bf5c03d


すべてのコンテナを削除する

要領は前項と同じです。

docker rm $(docker ps -q -a)

docker psでは起動しているコンテナのみ表示します。

停止しているコンテナも含めすべてのコンテナを表示するには-aフラグを用います。

ただし停止しているコンテナのみを削除するので、全てのコンテナを削除するには前項で紹介した方法を用いてコンテナをすべて停止する必要があります。


すべてのイメージを削除する

docker rmi $(docker images -q)

docker imagesでもpsコマンドと同じように-qフラグを用いることでイメージIDのみ取得することができます。

通常はコンテナが停止していないとDockerのイメージを削除することができませんが、-fフラグを用いることでコンテナが削除されていなくてもイメージを削除することができます。

docker rmi $(docker images -q) -f

ただしコンテナが起動している場合はイメージを削除できませんのでコンテナを停止する必要があります。

docker stop $(docker ps -q) && docker rmi $(docker images -q) -f


最後に

筆者は.bash_profileに以下を記述しaliasに登録しています。

alias docker-purge='docker stop $(docker ps -q) && docker rmi $(docker images -q) -f'

一つ一つコンテナの停止・削除、イメージの削除を行っていたときより非常に捗るようになりました。

本記事が皆様の一助になると幸いです。

最後までお読み頂きありがとうございました。不備や質問はコメント欄またはTwitter@shisama_までお願い致します。