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