Dockerイメージのlatestタグについて

プライベートなACR(Azure Container Registry)に色々と加工したコンテナイメージを置いて利用しているのですが、latest を指定して最新のイメージを取得することができませんでした。

その理由と対処法を調べたので、まとめようと思います。
メモ程度のものですが、何かの参考になれば幸いです。


latestタグとは

dockerコマンドでコンテナを扱うとき、イメージの最新版を指定するつもりで、〇〇(イメージ名):latest と書きますが、それのことです。

dockerコマンドの場合、コマンドの仕様として、イメージのタグが指定されていない場合は、:latest が付いている扱いになります。


:latest で最新版のイメージを扱える理由

結論から言えば、DockerHubでイメージを公開しているメンテナ(作成者)が、最新のイメージに latest というタグを付けているからです。

私はこの点を勘違いしていたのですが、latest が指定されたら最新版を自動的に判別する、という仕組みではありませんでした。

latest というのは単なる文字列で、特別な意味はありません。
それを指定することで最新版のイメージが取得できていたのは、そのようにイメージのタグが管理されているためでした。

新しいイメージがプッシュされると自動的にそれが latest になるというわけでもなく、都度、最新版に latest を付けるようです。
おかげで便利に使えているので、メンテナの方々に感謝です。


プライベートACRで latest = 最新版 を実現するには

最新版に latestタグを付けてプッシュするようにすれば、:latest で最新版を取得することができるようになります。

既に :latest のイメージがあるところに、新たに :latest がプッシュされると、新しい方で上書きされます。

最新版しか必要なければ、latest だけをプッシュすればいいのですが、イメージのバージョン管理もしたいところです。

バージョン名や番号のタグを付けたイメージを作成して、そのイメージに latest タグを付け、バージョン名・番号タグのもの、latest のものを両方ともACRにプッシュすることで、旧バージョンのイメージを保持しつつ、latest で最新版を使用することができるようになります。

イメージ作成からACR格納までは、以下のような流れになります。

docker build -t sampleacr.azurecr.io/testimage:ver1 .
docker tag sampleacr.azurecr.io/testimage:ver1 sampleacr.azurecr.io/testimage:latest
docker push sampleacr.azurecr.io/testimage:ver1
docker push sampleacr.azurecr.io/testimage:latest


この記事が気に入ったらサポートをしてみませんか?