未使用 Docker オブジェクトの取り除き
読む時間の目安: 2 分
Docker では未使用となったオブジェクトを取り除くために、従来どおりの(”ガベージコレクション” と呼ばれる)方法をとっています。
オブジェクトは、イメージ、コンテナー、ボリューム、ネットワークなどです。
こういったオブジェクトは、Docker に対して明示的に削除の指示を出さない限り、普通は削除されません。
こういった場合、Docker が余計なディスク容量を消費することにもつながります。
そこで Docker では、オブジェクトごとにprune
コマンドが提供されています。
さらにdocker system prune
を使えば、複数タイプのオブジェクトを一度に取り除くことができます。
ここでは、そういったprune
コマンドの利用方法について示します。
イメージの取り除き🔗
docker image prune
コマンドは未使用イメージを取り除くものです。
デフォルトでdocker image prune
は 「浮いている」(dangling)イメージのみを対象とします。
ここで「浮いている」イメージとは、タグづけがされておらず、どのコンテナーからも参照されていないものを指します。
「浮いている」イメージを削除するには以下を行います。
$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
既存コンテナーから利用されていないイメージをすべて削除するには-a
フラグを使います。
$ docker image prune -a
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
デフォルトでは、続行して良いかどうかが表示されます。
このプロンプトを省略したい場合は-f
または--force
フラグを用います。
取り除かれるイメージを限定したい場合は、--filter
フラグによるフィルター表現を指定することができます。
たとえば、生成されてから 24 時間以上経過したイメージを対象とする場合は、以下のようにします。
$ docker image prune -a --filter "until=24h"
フィルター表現は他にもあります。
さまざまな例については docker image prune
リファレンス を参照してください。
コンテナーの取り除き🔗
コンテナーを停止しても、--rm
フラグを指定した起動を行っていなければ、コンテナーは自動的には削除されません。
Docker ホスト上において、停止しているコンテナーも含めてコンテナーすべてを見るにはdocker ps -a
を実行します。
ひょっとすると特に開発マシンでは、たくさんのコンテナーが存在していたことに驚くかもしれません。
停止しているコンテナーの書き込みレイヤーは、まだディスク領域を占有しています。
これを取り除くにはdocker container prune
コマンドを実行します。
$ docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
デフォルトでは、続行して良いかどうかが表示されます。
このプロンプトを省略したい場合は-f
または--force
フラグを用います。
デフォルトで、停止しているコンテナーはすべて削除されます。
--filter
フラグを使うと、削除の範囲を限定することができます。
たとえば以下のコマンドの場合、停止してから 24 時間以上経過したコンテナーを削除します。
$ docker container prune --filter "until=24h"
フィルター表現は他にもあります。
さまざまな例については docker container prune
リファレンス を参照してください。
ボリュームの取り除き🔗
ボリュームは複数のコンテナーにおいて利用できるものです。 したがって Docker ホスト上に容量を多くとります。 ボリュームは自動的に削除されることがありません。 これを行ってしまうと、データを壊してしまうかもしれないからです。
$ docker volume prune
WARNING! This will remove all volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
デフォルトでは、続行して良いかどうかが表示されます。
このプロンプトを省略したい場合は-f
または--force
フラグを用います。
デフォルトで、未使用のボリュームはすべて削除されます。
--filter
フラグを使うと、削除の範囲を限定することができます。
たとえば以下のコマンドの場合、keep
ラベルがついていないボリュームだけが削除されます。
$ docker volume prune --filter "label!=keep"
フィルター表現は他にもあります。
さまざまな例については docker volume prune
リファレンス を参照してください。
ネットワークの取り除き🔗
Docker ネットワークはそれほど容量をとるものではありません。
ただしネットワークからは、iptables
ルール、ブリッジネットワークデバイス、ルーティングテーブル項目が生成されます。
これらを削除するためにdocker network prune
コマンドを用います。
これによって、どのコンテナーからも利用されていないネットワークが削除されます。
$ docker network prune
WARNING! This will remove all networks not used by at least one container.
Are you sure you want to continue? [y/N] y
デフォルトでは、続行して良いかどうかが表示されます。
このプロンプトを省略したい場合は -f
または--force
フラグを用います。
デフォルトで、未使用のネットワークはすべて削除されます。
--filter
フラグを使うと、削除の範囲を限定することができます。
たとえば以下のコマンドの場合、24 時間以上古いネットワークを削除します。
$ docker network prune --filter "until=24h"
フィルター表現は他にもあります。
さまざまな例については docker network prune
リファレンス を参照してください。
すべての取り除き🔗
docker system prune
コマンドは、イメージ、コンテナー、ネットワークを取り除くコマンドを合わせたものです。
ボリュームはデフォルトでは取り除かれません。
docker system prune
実行時にボリュームも取り除くには--volumes
フラグをつける必要があります。
$ docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all build cache
Are you sure you want to continue? [y/N] y
ボリュームも取り除きたい場合は--volumes
フラグをつけます。
$ docker system prune --volumes
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all volumes not used by at least one container
- all dangling images
- all build cache
Are you sure you want to continue? [y/N] y
デフォルトでは、続行して良いかどうかが表示されます。
このプロンプトを省略したい場合は-f
または--force
フラグを用います。