Dockerタグの簡単な紹介

少しでもDockerを使用している場合は、タグに出くわしたことでしょう。コロンの後の部分がタグとして知られている「my_image_name:1」のように見えることがよくあります。画像にタグを付けるときにタグが常に指定されるとは限りませんが、後でその最後に説明します。

Dockerを使い始めて以来、タグについて非常に混乱してきました。ドキュメントはそれらをあまりよく説明しておらず、このトピックに関する完全な説明は実際にはありません。だから私はこの記事を書くことにしました。

Dockerタグとは何ですか?

では、Dockerタグとは正確には何ですか?簡単に言うと、Dockerタグは、特定のイメージバージョン/バリアントに関する有用な情報を伝達します。これらは画像のIDのエイリアスであり、多くの場合次のようになりますf1477ec11d12。それはあなたのイメージを参照するための単なる方法です。良い例えは、Gitタグが履歴内の特定のコミットをどのように参照するかです。

タグが機能する最も一般的な2つのケースは次のとおりです。

  1. イメージを作成するときは、次のコマンドを使用します。
docker build -t username/image_name:tag_name .

このコマンドが何をするのかを少し開梱してみましょう。現在のディレクトリに存在するDockerファイルをフェッチするようにDockerデーモンに指示します(これ.が最後に実行されます)。次に、Dockerデーモンにイメージをビルドし、指定されたタグを付けるように指示します。を実行するとdocker images、リポジトリがusername/image_nameでタグがであるイメージが表示されますtag_name

username/image_name 画像の名前を指定するための必須の形式ではありません。これは、画像をレジストリにプッシュする必要があるときに、画像に再度タグを付けないようにするための便利な規則です。

画像には任意の名前を付けることができます。パブリックDockerレジストリの場合、イメージの命名中は2レベルの階層に制限されます。たとえば、画像に名前を付けることはできません。a/b/c:1.この制限は通常、プライベートレジストリには存在しません。前に述べたように、指定するtag_name.ことは必須ではありません。その場合に何が起こるかはすぐにわかります。

2.tagコマンドを使用して画像に明示的にタグを付けます。

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

このコマンドは、TARGET_IMAGE それを参照する名前でエイリアス(参照)を作成するだけSOURCE_IMAGE.です。これは、既存の画像に別の名前を割り当てて参照するようなものです。ここでも、タグがオプションとして指定されていることに注意してください[:TAG]

タグを指定しないとどうなりますか?

では、画像のタグ付け中にタグを指定しないとどうなるかを見てみましょう。ここでlatestタグが登場します。明示的なタグなしで画像にタグが付けられると、latest デフォルトでタグが付けられます。それは多くの混乱を引き起こす不幸な命名の選択です。ただし、画像を指定しない場合に画像に付けられるデフォルトのタグと考えるのが好きです

latest特にDockerfilesでは、イメージの最新バージョンであることが期待されているため、多くの混乱が生じています。例を挙げて、さまざまなシナリオを考えてみましょう。

シナリオ1:シナリオ1:

次のステートメントがDockerfileに存在するとします。

FROM debian

タグを指定しなかったため、Dockerはlatestタグを追加し、イメージをプルしようとしますdebian:latest

シナリオ2:シナリオ2:

FROM debian:9.3

タグはここで明示的に言及されているため、Dockerは9.3とタグ付けされたDebianイメージをプルします

もう1つ覚えておくべきことは、画像にタグを1つだけ含める必要があるというルールはないということです。画像には複数のタグを付けることができ、通常、メジャーバージョンとマイナーバージョンを指定するために使用されます。たとえば、次のことを考慮してください。

この記事の執筆時点で、latestDebianのイメージのためのタグが指す9.3リリース9リリース。これは、メジャーバージョンまたはマイナーバージョンがイメージにバンプされるたびに、将来変更される可能性があります。

セマンティックバージョニングに使用されるタグは従う規則ですが、タグはその目的のためだけに設計されたものではないことに注意してください。

結論として、最新は特別なタグではありません

これまで説明してきたことからの主なポイントは、最新のものは他のタグとまったく同じであるということです。latest常に画像の最新の安定したリリースを指すように、画像に適切にタグを付ける責任は開発者にあります。

したがって、イメージをプルするときにDockerfilesでタグを明示的に指定しません。これは、以前に使用したものとは完全に異なるバージョンのベースイメージになる可能性があるためです。それが大きな隆起であるか小さな隆起であるかについての保証はありません。古いリリースでも、としてタグ付けできますlatest

PS投稿に誤解や誤りを見つけた場合は、@ ScribbingOnまでお気軽にツイートしてください。

このいくつかを理解するのを手伝ってくれたJérômePetazzoniに感謝します。