ぶら下がり画像とは何ですか?未使用の画像とは何ですか?


155

docker image pruneの docker ドキュメンテーションでは、-aフラグを使用して

ぶら下がっている画像だけでなく、すべての未使用の画像を削除します

以降

ぶら下がり画像をすべて削除します。-aを指定すると、どのコンテナーからも参照されていないすべてのイメージも削除されます。

誰かがダングリングイメージとは何か、ダングリングイメージと未使用のイメージの違いは何ですか?


docker image prune(-aなし)もまったく同じです
herm

jenkinsでそれを使用すると失敗します。Dockerイメージキャッシュに依存している場合、本番環境ではDockerバックアップが失われます。prune本番では推奨されない/
Jinna Balu

回答:


153

未使用のイメージは、コンテナで割り当てられていないか、使用されていないことを意味します。たとえば、実行中docker ps -a-終了したコンテナと現在実行中のコンテナがすべて一覧表示されます。コンテナ内で使用されている画像はすべて「使用済み画像」です。

一方、ダングリングイメージとは、イメージの新しいビルドを作成したが、新しい名前が付けられなかったことを意味します。つまり、あなたが持っている古い画像は「ぶら下がり画像」になります。これらの古いイメージは、タグ付けされておらず、<none>実行時に名前に「」が表示されるイメージですdocker images

を実行docker system prune -aすると、未使用の画像とぶら下がっている画像の両方が削除されます。したがって、コンテナで使用されているイメージは、終了したか現在実行されているかに関係なく、影響を受けません。


ドキュメントによると、-aなしでdocker pruneを実行すると、ダングリングイメージのみが削除されます。-aは、未使用の画像も確実に削除されるようにしますか?docs.docker.com/engine/reference/commandline/system_prune
herm


1
とても興味深い。したがって、ぶら下がり画像はコンテナで使用できます。注:これらのタグなしイメージを使用しているコンテナーが存在する場合、Dockerは警告を出します。
herm

7
docker system prune --all --filter "until=24h"最近の画像も保持
Harry Moreno

1
docs.docker.com/engine/reference/commandline/system_prune/…に よれば、docker system prune -a停止したコンテナも削除されます。したがって、終了したコンテナにのみ関連付けられている画像も削除する必要がありますよね?
lfk '14年

41

ぶら下がり画像をクリーンアップする最も安全で簡単な方法

docker images --quiet --filter=dangling=true | xargs --no-run-if-empty docker rmi

Dockerイメージは複数のレイヤーで構成されています。ぶら下がり画像は、タグ付けされた画像とは関係のないレイヤーです。それらはもはや目的を果たしておらず、ディスク領域を消費します。

注:以前のリリースにロールバックできないコンテナによって参照されていないすべてのイメージが削除されるpruneため、本番環境では使用しないことをお勧めしますdocker system prune -a

にの-f値を指定dangling=trueしてフィルターフラグを追加することにより、ダングリングイメージを一覧表示しdocker imagesます。

ぶら下がり画像の一覧表示

docker images -f dangling=true

ぶら下がり画像を削除

docker rmi $(docker images -f dangling=true -q)

または

docker images --quiet --filter=dangling=true | xargs --no-run-if-empty docker rmi

cronジョブを実行してぶら下がりを削除する場合は、上記を使用してジョブが正常に実行されることを確認します。Jenkinsのように、belowowカンマ付きのジョブでフリースタイルのジョブを実行すると、マシンにぶら下がっているものがなくても失敗することはありません。

これは、ぶら下がっている画像をクリーンアップして、使用のためにディスク領域を取り戻すための最も安全で簡単な方法です。


2
docker image pruneはどうですか?ドキュメントは、「すべてのぶら下がり画像を削除します。-aが指定されている場合は、どのコンテナーからも参照されていないすべての画像も削除します。」docs.docker.com/engine/reference/commandline/image_prune/...
ハーム島

2
@herm、参照したページの下部から、「注:プルーンが何かを削除する前に確認を求められますが、削除される可能性のあるもののリストは表示されません。」この回答のポイントは、ぶら下がっているすべての画像をプルーンで盲目的に削除するのではなく、ぶら下がり画像のリストを取得して、明示的に削除するように指定できることだと思います。
bzier

名前とタグが何もない画像docker imagesはぶら下がります。サイズの確認方法は?また、名前とタグが含まれdocker images -aていない画像は中間画像です。削除できますか、サイズを確認するにはどうすればよいですか?
変数

17

docker内の画像は、画像IDと呼ばれることが多いsha256ダイジェストによって参照されます。そのダイジェストは、イメージがDockerホストに存在するために必要なすべてです。通常、これらのダイジェストを指すタグがあります。たとえば、私のシステムでは、busybox:latest current points to image id c30178c523 ...などのタグがあります。複数のタグが同じイメージを指すことができます。たとえば、busybox:latestの新しいコピーをプルしたり、アプリケーションイメージの新しいバージョンをビルドしたりする場合など、タグは別のIDを指すように変更できます。

ぶら下がり画像とは、タグがなく、子画像(たとえば、の異なるバージョンを使用した古い画像)がない画像のことFROM busybox:latestです。彼らは以前彼らを指し示しているタグを持っていたかもしれません、そしてそのタグは後で変更されました。または、タグがなかった可能性があります(たとえばdocker build、タグオプションを含まないの出力)。これらは、古いイメージIDを参照するコンテナーがまだ実行されていない限り、通常は削除しても安全です。それらを保持する主な理由は、ビルドのキャッシュのためです。

さらに、コンテナー(停止したコンテナーを含む)で現在使用されていないイメージをダウンロードした可能性があります。これらはぶら下がっている画像とは完全に異なり、将来使用する予定がない場合、または必要なときに別のコピーをダウンロードすることを気にしない限り、削除しても安全です。


ドッカービルドが実行されている間(それがレイヤーと将来のダングリングイメージの可能な候補を作成するプロセス)、ドッカーイメージプルーンを実行すると、新しいウィンドウで、進行中のビルドに何らかの影響がありますか?
変数

@variableで競合状態が発生する可能性がありますが、通常、ビルドステップの実行中のコンテナーにより、イメージが使用中であると識別されます。発生する可能性のある最悪の事態は、プルーンがエラーをスローするか、ビルドがエラーをスローし、再実行する必要があります。プルーニングが成功すると、将来のビルドでイメージを再度ダウンロードする必要があるため、プルーニングを制限して、現在ビルドに使用しているイメージを回避できるかどうかを検討します。
BMitch

中間画像(実行時に表示される名前/タグがないものdocker images -a)は、ぶら下がり画像とも呼ばれますか?Dockerイメージプルーンでクリアされますか?
変数

私の環境にはもうありません(ここでビルドキットを使用)。そのため、ラボ環境で何が起こるか確認することをお勧めします。
BMitch

つまり、中間段階からタグなしの「画像」を削除しても意味がありません。最後のタグ付き画像を削除しない限り、すべてのレイヤーは後の画像で再利用され、削除できません。これらを削除すると、ビルドキャッシュが破壊され、今後のすべてのイメージのビルドに時間がかかり、ディスク領域を保存できます。
BMitch

5

ぶら下がり画像は、タグ付けされた画像とは関係のないレイヤーです。それらはもはや目的を果たしておらず、ディスク領域を消費します。

未使用のイメージとは、コンテナで割り当てられていないか、コンテナで使用されていないイメージです。

ぶら下がり画像の一覧表示

docker images -f dangling=true

3

ぶら下がり画像はタグなしの画像です。次のコマンドは、ダングリングイメージのリストを提供します。

docker images --filter "dangling=true"

docker image prune ぶら下がっている画像をすべて削除します。

未使用の画像は、タグが付いているが現在コンテナーとして使用されていない画像です。将来必要になるかもしれません。

docker image prune -a 未使用のイメージだけでなく、未処理のイメージもすべて削除します。

一般的に、使用されていないすべての画像は、しばらくの間は削除したくありません。したがって、フィルターを使用して削除することをお勧めします。

docker image prune -f --filter "until=6h"


1)docker image prune -a -f --filter "until=6h"ぶら下がっている画像も削除しますか?
変数

2)あなたが言及した最後のコマンドでdocker image prune -f --filter "until=6h"--aがないので、なぜそれが未使用の画像を削除するのですか?
変数

0

ここでandyneffの厚意により、ぶら下がっている画像を削除するための便利なコマンド(エイリアス)を見つけました:https : //forums.docker.com/t/how-to-delete-cache/5753 :

alias docker_clean_images='docker rmi $(docker images -a --filter=dangling=true -q)' 
alias docker_clean_ps='docker rm $(docker ps --filter=status=exited --filter=status=created -q)' 

最初のものは、すべてのぶら下がっている画像をクリーンアップします。これは、複数のビルドから残っている中間イメージを削除するのに役立ちます。2つ目は、停止したコンテナを削除するためのものです。これらは私が定期的なメンテナンスに使用するエイリアスです

すべてのキャッシュを削除する場合は、コンテナーが使用しているイメージを削除できないため、まずすべてのコンテナーが停止して削除されていることを確認する必要があります。だから似たようなもの

docker kill $(docker ps -q) docker_clean_ps docker rmi $(docker images
-a -q)

これにより、キャッシュ内のすべての画像が削除されて削除されます。


0

画像のスクリーンショットでは、「なし」の名前はダングリング画像です。ぶら下がっているイメージは、イメージの新しいビルドを作成したが、新しい名前が付けられなかったことを意味します。つまり、あなたが持っている古い画像は「ぶら下がり画像」になります。これらの古いイメージは、タグ付けされておらず、Dockerイメージを実行したときに名前に「」が表示されるイメージです。

docker system prune -a、未使用の画像とぶら下がっている画像の両方を削除します。したがって、コンテナで使用されているイメージは、終了されているか現在実行されているかに関係なく、影響を受けません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.