web-dev-qa-db-ja.com

他の場所からプッシュせずに、ローカルのDockerイメージが古くなっているかどうかを確認するにはどうすればよいですか?

CoreosサーバーのDockerコンテナーでreactアプリを実行しています。 https://hub.docker.com/r/myimages/myappからdockerhubからプルされたとしましょう。

ここで、アプリコンテナーのdockerhubイメージが更新されているかどうかを定期的にチェックして、ローカルで実行しているイメージが遅れているかどうかを確認したいと思います。

ローカルのDockerイメージがリモートのイメージと比較して古くなっているかどうかを確認する最も効率的な方法は何でしょうか。私がこれまでに見つけたすべてのソリューションは、更新をプッシュするbashスクリプトまたは外部サービスです。 Dockerにできるだけネイティブなソリューションを見つけたいので、他の場所からの通知をプッシュしないようにします(サーバーに更新されたイメージを警告するため)。

18
user5918874

Docker Hubを使用している場合は、Webhookを使用してDocker Hostに更新について通知し、それに対してアクションを実行できます。

Webhookを使用することは、それを行うための「簡単な」方法です(私は思います)。そうでない場合は、Dockerプルで何らかのクロールを行うか、@ alebiancoが説明するようにハッシュまたはビルド/作成日を比較する必要があります。

これに関するドキュメントは次のとおりです。 https://docs.docker.com/docker-hub/webhooks/

docker Hubには 利用可能なAPI があります

タグのリストを取得でき、そこからマニフェストの詳細を取得できるはずです。


編集

私はいくつか掘り下げましたが、画像のチェックサム、マニフェスト、または画像を構成するレイヤーは公開されていないようです。

私が見つけた最も近いものは作成日です...あなたが何かをリモートで安全にしようとしているなら、私はそれを使うことを提案しません。

とにかく、最初にアクセストークンを取得する必要があります

curl "https://auth.docker.io/token?service=registry.docker.io&scope=repository:library/ubuntu:pull"

応答からトークンを抽出すると、画像バージョンのマニフェストを読み込むことができます

curl --header "Authorization: Bearer $TOKEN" https://index.docker.io/v2/library/ubuntu/manifests/latest

返されたjsonの履歴オブジェクトを調べると、createdプロパティが見つかります。

次に、ローカルイメージの作成日を取得できます。

docker inspect --format "{{json .Created}}" ubuntu:latest

2つを比較し、身をかがめる...

3
alebianco

Dockerfileを直接チェックするクローラーまたはfrom文字列をチェックするクローラーでこの問題を解決しました。

docker hub にあるdockerイメージにすべてをバックアップしました。

Gitlabciパイプラインでイメージを実行するだけです。ベースイメージが古くなっている場合は、タグを簡単に選択できるように、すべての新しいバージョンが印刷されます。

リンク: https://hub.docker.com/r/olafnorge/docker-image-crawler/

0
Volker Machon