1. 概要

このチュートリアルでは、Dockerでぶら下がっている未使用の画像が一般的であるいくつかの理由を見ていきます。 次に、それらを削除するいくつかの方法を見ていきます。

未使用のイメージが多いとディスク領域が無駄になる可能性があるため、ぶら下がっている未使用のDockerイメージをときどきクリーンアップすることをお勧めします。

2. Dockerで未使用のオブジェクト

Dockerは未使用のオブジェクトを自動的に削除しません。 代わりに、明示的に削除するように要求されるまで、ディスク上に保持されます。 未使用のオブジェクトは次のとおりです。

  • アクティブなコンテナを持たないすべてのプルされたイメージ
  • 停止状態のすべてのコンテナ
  • 停止および削除されたコンテナに対応するボリューム
  • キャッシュを構築する

Dockerを使用すると、不要なイメージが発生する可能性と、それらを削除する方法を調べてみましょう。

2.1. ぶら下がっているDockerイメージ

ぶら下がっている画像は、同じ名前とタグの新しい画像で上書きすると作成されます。

画像を更新すると、画像がぶら下がるという小さな例を見てみましょう。 以下は単純なDockerfileです。

FROM ubuntu:latest
CMD ["echo", "Hello World"]

このイメージを作成しましょう:

docker build -t my-image .

以下のコマンドを実行することで、イメージが作成されたことを確認できます。

docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
my-image     latest    7ed6e7202eca   32 seconds ago   72.8MB
ubuntu       latest    825d55fb6340   6 days ago       72.8MB

Dockerfileに少し変更を加えたとします。

FROM ubuntu:latest
CMD ["echo", "Hello, World!"]

前と同じコマンドを使用してイメージを再構築し、イメージを再度リストしてみましょう。

docker images
REPOSITORY   TAG       IMAGE ID       CREATED              SIZE
my-image     latest    da6e74196f66   4 seconds ago        72.8MB
<none>       <none>    7ed6e7202eca   About a minute ago   72.8MB
ubuntu       latest    825d55fb6340   6 days ago           72.8MB

ビルドにより、新しい my-imageimageが作成されました。 ご覧のとおり、古い画像はまだ残っていますが、現在はぶら下がっています。 その名前とタグはに設定されています

私は注意してください Dockerfileに変更を加えなかった場合、buildコマンドの実行中にイメージは再構築されませんでした。 キャッシュから再利用されます。

2.2. 未使用のDockerイメージ

未使用のイメージとは、実行中または停止中のコンテナーが関連付けられていないイメージです。

未使用の画像の例は次のとおりです。

  • レジストリから取得されたが、まだどのコンテナでも使用されていない画像
  • コンテナが削除された画像
  • 古いバージョンでタグ付けされ、使用されなくなった画像
  • すべてのぶら下がっている画像

ご覧のとおり、未使用の画像は必ずしもぶら下がっていません。 将来的にはこれらの画像を使用する可能性があり、それらを保持したい場合があります。 ただし、未使用の画像を大量に保持すると、スペースの問題が発生する可能性があります。

3. 不要な画像の削除

Dockerでぶら下がっている画像や未使用の画像が一般的であるいくつかの理由を調べました。 それでは、それらを削除するいくつかの方法を見てみましょう。

3.1. IDまたは名前による画像の削除

イメージIDがわかっている場合は、 dockerrmiコマンドを使用してイメージを削除できます。

docker rmi 7ed6e7202eca

このコマンドは、ID 7ed6e7202eca (ぶら下がっている画像)の画像を削除します。 画像を再確認しましょう:

docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
my-image     latest    da6e74196f66   18 minutes ago   72.8MB
ubuntu       latest    825d55fb6340   6 days ago       72.8MB

または、特定の未使用のイメージを削除する場合は、イメージ名とタグを指定して dockerrmiコマンドを使用できます。

docker rmi my-image:latest

3.2. Docker Image Prune

ぶら下がっている画像を見つけて1つずつ削除したくない場合は、 docker imagepruneコマンドを使用できます。 このコマンドは、ぶら下がっているすべての画像を削除します。

未使用の画像も削除したい場合は、-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

このコマンドは、削除されたイメージIDのリストと解放されたスペースを返します。

もう一度画像を一覧表示すると、コンテナを実行しなかったため、画像が残っていないことがわかります。

3.3. Docker System Prune

未使用のオブジェクトをすべて見つけて削除するのは面倒です。 作業を簡単にするために、 docker systempruneコマンドを使用できます。

このコマンドは、デフォルトで、以下のオブジェクトを削除します。

  • 停止したコンテナ–停止状態のコンテナ
  • 少なくとも1つのコンテナで使用されていないネットワーク
  • ぶら下がっている画像
  • ぶら下がりビルドキャッシュ–ぶら下がりイメージをサポートしていたビルドキャッシュ

さらに、 -a フラグを追加して、すべての未使用のコンテナー、イメージ、ネットワーク、およびビルドキャッシュ全体を削除できます。 これは、多くのスペースを解放したい場合に便利です。

この例を見てみましょう:

docker system prune -a
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N]

4. 結論

このチュートリアルでは、Dockerでぶら下がっている画像や未使用の画像が一般的である理由を確認しました。 また、 rmi、 image prune、、および systempruneコマンドを使用してそれらを削除する方法も検討しました。