Docker–ぶら下がっている未使用の画像の削除
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が作成されました。 ご覧のとおり、古い画像はまだ残っていますが、現在はぶら下がっています。 その名前とタグはに設定されています
私は注意してください
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コマンドを使用してそれらを削除する方法も検討しました。