Eine kurze Einführung in Docker-Tags

Wenn Sie schon eine Weile mit Docker gearbeitet haben, sind Sie bestimmt auf Tags gestoßen. Sie sehen oft wie "my_image_name: 1" aus, wobei der Teil nach dem Doppelpunkt als Tag bezeichnet wird. Das Tag wird beim Markieren von Bildern nicht immer angegeben, aber wir werden später darauf eingehen.

Seit ich Docker benutze, bin ich sehr verwirrt über Tags. Die Dokumentation erklärt sie nicht sehr gut und es gibt wirklich keine gründlichen Erklärungen zu diesem Thema. Deshalb habe ich beschlossen, diesen Beitrag zu schreiben.

Was sind Docker-Tags?

Was genau sind Docker-Tags? Mit einfachen Worten, Docker-Tags vermitteln nützliche Informationen zu einer bestimmten Bildversion / -variante. Sie sind Aliase zur ID Ihres Bildes, die oft so aussehen : f1477ec11d12. Es ist nur eine Möglichkeit, sich auf Ihr Bild zu beziehen. Eine gute Analogie ist, wie Git-Tags auf ein bestimmtes Commit in Ihrem Verlauf verweisen.

Die beiden häufigsten Fälle, in denen Tags ins Spiel kommen, sind:

  1. Beim Erstellen eines Bildes verwenden wir den folgenden Befehl:
docker build -t username/image_name:tag_name .

Versuchen wir, etwas zu entpacken, was dieser Befehl bewirkt. Wir weisen den Docker-Dämon an, die im aktuellen Verzeichnis vorhandene Docker-Datei abzurufen (genau das macht der .am Ende). Als Nächstes weisen wir den Docker-Dämon an, das Image zu erstellen und ihm das angegebene Tag zu geben. Wenn Sie ausführen docker images, sollten Sie ein Image sehen, dessen Repository username/image_nameund Tag ist tag_name.

username/image_name ist kein obligatorisches Format für die Angabe des Bildnamens. Es ist nur eine nützliche Konvention, um zu vermeiden, dass Ihr Bild erneut markiert wird, wenn Sie es in eine Registrierung verschieben müssen.

Ihr Bild kann beliebig benannt werden. Für die öffentliche Docker-Registrierung sind Sie beim Benennen von Bildern auf eine zweistufige Hierarchie beschränkt. Beispielsweise kann Ihr Bild nicht den Namen haben. a/b/c:1.Diese Einschränkung besteht normalerweise nicht in privaten Registern. Wie bereits erwähnt, ist es nicht zwingend erforderlich, a anzugeben. tag_name.Wir werden sehen, was in diesem Fall bald passiert.

2. Kennzeichnen Sie ein Bild explizit mit dem tagBefehl.

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

Dieser Befehl erstellt lediglich einen Alias ​​(eine Referenz) mit dem Namen des, der auf TARGET_IMAGE das verweist. SOURCE_IMAGE.Das ist alles, was er tut. Es ist, als würde man einem vorhandenen Bild einen anderen Namen zuweisen, um darauf zu verweisen. Beachten Sie, wie das Tag auch hier als optional angegeben wird [:TAG].

Was passiert, wenn Sie kein Tag angeben?

Okay, jetzt wollen wir herausfinden, was passiert, wenn Sie beim Markieren eines Bildes kein Tag angeben. Hier kommt das latestTag ins Bild. Immer wenn ein Bild ohne explizites Tag markiert wird, erhält es latest standardmäßig das Tag. Es ist eine unglückliche Namenswahl, die viel Verwirrung stiftet. Aber ich stelle es mir gerne als Standard-Tag vor , das Bildern zugewiesen wird, wenn Sie keines angeben.

latestAufgrund der Erwartung, dass es sich um die neueste Version des Bildes handelt, insbesondere in Dockerfiles, wird viel Verwirrung gestiftet. Betrachten wir die verschiedenen Szenarien anhand eines Beispiels:

Szenario 1:

Angenommen, die folgende Anweisung ist in unserer Docker-Datei enthalten:

FROM debian

Da wir kein Tag angegeben haben, fügt Docker das latestTag hinzu und versucht, das Bild abzurufen debian:latest.

Szenario 2:

FROM debian:9.3

Da das Tag hier explizit erwähnt wird, zieht Docker das mit 9.3 gekennzeichnete Debian-Image

Eine andere Sache, die Sie beachten sollten, ist, dass es keine Regel gibt, die besagt, dass ein Bild nur ein Tag haben muss. Ein Bild kann mehrere Tags haben und diese werden normalerweise verwendet, um Haupt- und Nebenversionen anzugeben. Betrachten Sie zum Beispiel Folgendes:

Zum Zeitpunkt des Schreibens dieses Beitrags latestverweist das Tag für das Debian-Image auf die 9.3Veröffentlichung und die 9Veröffentlichung. Dies wird sich höchstwahrscheinlich in Zukunft ändern, wenn die Haupt- oder Nebenversion für das Bild gestoßen wird.

Bitte beachten Sie, dass Tags, die für die semantische Versionierung verwendet werden, eine Konvention sind, die befolgt wird, aber Tags wurden nicht nur für diesen Zweck entwickelt.

Zusammenfassend ist die neueste Version kein spezielles Tag

Das Wichtigste, was wir bisher behandelt haben, ist, dass das Neueste genau wie jedes andere Tag ist . Es liegt in der Verantwortung des Entwicklers, die Bilder ordnungsgemäß zu kennzeichnen, sodass latestimmer auf die neueste stabile Version des Bildes verwiesen wird .

Daher geben wir beim Abrufen von Bildern kein explizites Tag in unseren Docker-Dateien an, da wir möglicherweise eine völlig andere Version des Basis-Images haben als zuvor. Es gibt keine Garantie dafür, ob es sich um eine größere oder eine kleinere Beule handelt. Sogar eine alte Version kann als markiert werden latest.

PS Wenn Sie in dem Beitrag falsche Vorstellungen / Fehler gefunden haben, können Sie mir gerne @ScribbingOn twittern.

Vielen Dank an Jérôme Petazzoni, der mir geholfen hat, einige davon zu verstehen.