古いDockerイメージを定期的にクリーニングするためのベストプラクティスやツールはありますか?


13

Dockerレジストリから古い画像を削除する場合、エレガントな方法やベストプラクティスはありますか?

https://github.com/docker/docker-registry/labels/deleteに多くのリクエスト/問題がありますが、良い/人気のあるソリューションは見つかりませんでした。

だから、それをするのに役立つツールやテクニックはありますか?

また、実行中に従うベストプラクティスはありますか?


2
レジストリをきれいにする方法を尋ねていますか?(これはあなたが提供するリンクと質問です)、しかし、受け入れられた答えはレジストリをきれいにすることではなく、ローカルのドッカーをきれいにすることです。
ダロア

回答:


10

私はSpotify / docker-gcで幸運に恵まれました 。cronから、またはdocker containerとして実行できます。

シンプルなDockerコンテナーとイメージガベージコレクションスクリプト。

  • 1時間以上前に終了したコンテナは削除されます。
  • その後、残りのコンテナに属さない画像は削除されます。

2
一見、すべてのbashのものの背後にあるのは、@ rombobの答えからのワンライナーのサブセットであるように見えます。それは本当docker-gcですか、それとも私が行方不明になっているという点で「知性」がありますか?
-AnoE

1
Opはリンクからレジストリから削除する方法について質問しますが、docker-gcはレジストリから削除せず、ローカルマシンから削除するだけです。OPはローカルでクリーンアップする方法を本当に求めていたと思います
ダロー

Docker-gcのページでは、docker system prune代わりに使用することをお勧めします。しかし、Dockerのプルーンでいくつかの画像を削除から除外する方法を見つけられませんでした。docker system prune?でいくつかの画像を除外する方法があります
アレクサンダーアルテメンコ

9

ベストプラクティスとは言えませんが、これはcronによってトリガーとして使用されるもので、より良い提案を喜んで確認します。

echo "safely removing untagged images"
docker rmi $(docker images | awk '/<none>/{print $3}')

echo "safely removing stopped containers"
docker rm $(docker ps -a -q)

echo "safely removing old containers"
docker ps -a | awk '/weeks ago|months ago|days ago/{print $1}' | xargs --no-run-if-empty docker rm

echo "safely removing old images"
docker images | awk '/weeks ago|months ago|days ago/{print $3}' | xargs --no-run-if-empty docker rmi

echo "safely removing old volumes, custom rebuild of martin/docker-cleanup-volumes image"
docker run -v /var/run/docker.sock:/var/run/docker.sock -v $(readlink -f /var/lib/docker):/var/lib/docker --rm example/docker-cleanup-volumes

echo "native cleanup Docker => 12"
docker system prune -f

grepとawkを連鎖させないで、awkコマンド `regex {command}`の直前に同じフィルターを実行してください
Tensibai

1
@Tensibai AWKウィザードを幸せにするものは何でも:)
rombob

念のため、それは単なる教訓的なものではなく、プロセスの生成と大量のコンテキスト変更を保存します:)ここではあまり変わりませんが、それを主張する機会は良いです:)
Tensibai

@Tensibai間違いなく、良い習慣は時間とともに報われ、産卵は私たちに時間とお金を要しました:)
rombob

特に、R入力の準備のために数十億行のログファイルを解析/フォーマットする場合:)ここでは、数十行以上は期待していません。
テンシバイ

4

私のローカルマシン(mac)には、定期的に実行して、clean-docker-for-mac.shのすべての余分なイメージをクリーンアップするスクリプトがあります。

私のサーバーでは、定期的に終了したコンテナをクリーンアップし、使用されていないイメージとボリュームを削除するmeltwater / docker-cleanupを実行します。

Codemasonでの作業には、これらのようなスクリプトが必要であるという多くの異なるDockerイメージを使用しています。楽しい!


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