Dockerhubに3つの画像を持つユーザーリポジトリがあるとします。画像にはA
、B
、C
のタグが付けられています。ここでC
は私の最新のタグです。
今、私はこれらのタグを知りません。 docker pull user/image
を実行すると、Tag latest not found in repository docker.io/user/image
というエラーが表示されます。最新のタグ(この場合はC
)で画像をプルするにはどうすればよいですか。
私は私の質問に対する答えを得たと思います:
curl -s -S "https://registry.hub.docker.com/v2/repositories/repo/image/tags/" | jq '."results"[]["name"]'
は、dockerhubリポジトリ内のすべてのタグのリストを表示します。次に、これをsed -n 1p
で簡単にパイプして、最新のコミットを取得できます。
はい、私は絶対に同意します。最新のタグは紛らわしいです。最新のタグは、実際には必ずしも画像の最新バージョンを指しているとは限りません。みてみましょう:
1)タグ名を指定せずにイメージをプルすると、Dockerは「latest」とタグ付けされたイメージをプルしようとします
2)レジストリへのプッシュ操作の前に画像にタグを付けない場合、Dockerは自動的に「最新」のタグを付けます。
3)画像にタグを付けて、それが実行しているように聞こえる場合、Dockerは「latest」でタグを付けることはありません。次に、「latest」タグを手動で適用する必要があります
私の考えでは、「latest」タグは代わりに「default」タグであり、pullコマンドでタグ名が指定されていない場合にレジストリからプルされるデフォルトのイメージとして理解されるはずです。
複数のタグを適用する方法の詳細については、この回答を参照してください: Dockerで名前付きの最新のタグを作成する方法は?
'latest'タグを考える1つの方法は、gitの 'master'タグのようなものです。実際、私は彼らがそれをそれと呼んでいたらいいのにと思います!
ブランチを指定せずにgitリポジトリのクローンを作成すると、最近他のブランチに更新がプッシュされた場合でも、「master」ブランチが取得されます。
Dockerイメージをプルすると、他のイメージが他のタグにプッシュされた可能性がありますが、「latest」タグが取得されます:-)