Was sind Docker-Labels und wann sollten Sie sie verwenden?

0
223

Michael Vi/Shutterstock.com

Mit Docker-Labels können Sie beliebige Metadaten an Ihre Container, Images, Volumes und andere Ressourcen. Sie können Ihre Docker-Objekte mit Informationen versehen, die für Ihre Organisation, Ihren Workflow oder Ihre Toolchain spezifisch sind.

Labels sollen ein offenes Klassifizierungssystem sein, das Sie an Ihre eigenen Bedürfnisse anpassen können. So erstellen Sie neue Labels und verwenden sie zum Filtern von Objekten, die von der Docker-CLI zurückgegeben werden.

Unterstützte Objekttypen

Sie können Verwenden Sie Labels mit den folgenden Docker-Objekten:

  • Container
  • Images
  • Volumes
  • Netzwerke
  • Daemon-Instanzen
  • Schwarmknoten und Dienste

Jeder Objekttyp unterstützt Labels als Teil seiner CLI-Befehlsgruppe. Es spielt keine Rolle, ob Sie Docker-Image, Docker-Netzwerk oder Docker-Volume verwenden.

Hinzufügen von Labels

Labels werden hinzugefügt wenn Sie ein Objekt erstellen. Sie können nach der ersten Erstellung nicht geändert werden; Sie müssen das Objekt löschen und durch eine neue Version ersetzen, wenn Änderungen erforderlich sind. Eine Ausnahme bilden Labels, die Docker Swarm-Knoten und -Diensten zugewiesen sind und die jederzeit dynamisch aktualisiert werden können.

Das Flag –label wird verwendet, um Labels zu setzen. Jedes Label ist ein Schlüssel-Wert-Paar, wobei Schlüssel und Wert durch ein Gleichheitszeichen (=) getrennt sind:

docker run my-image:latest –label demo-label=example-value Beschriftungsschlüssel können alphanumerische Kleinbuchstaben, Punkte (.) und Bindestriche (-) enthalten. Sie müssen mit einem alphanumerischen Zeichen beginnen und enden. Die Regeln für die DNS-Notation werden befolgt, sodass mehrere aufeinanderfolgende Punkte und Bindestriche nicht zulässig sind.

Docker akzeptiert jede Zeichenfolge als Label-Werte. Beachten Sie jedoch, dass keine Serialisierung oder Umwandlung stattfindet. Komplexe Werte wie JSON oder XML werden als einfacher String gespeichert und abgerufen.

Best Practices für Labels

Docker schlägt einige Richtlinien vor für die Benennung Ihrer Labels, die die Interoperabilität im gesamten Ökosystem verbessern. Es empfiehlt die Verwendung von Namespace-Labels mit der von App-Stores und Paketmanagern bevorzugten Reverse-DNS-Notation:

docker run my-image:latest –label=com.example.demo-label=example-value

Diese Vorgehensweise hilft, Namenskonflikte zu vermeiden, wenn Labels von Tools in Ihrem Build-System festgelegt werden. Viele Automatisierungseinrichtungen fügen den von ihnen erstellten Docker-Objekten ihre eigenen Labels hinzu, um die Verfolgung und Verwaltung zu erleichtern. Docker unterstützt keine doppelten Labelschlüssel und die zweimalige Verwendung desselben Schlüssels führt dazu, dass der Wert der letzten Wiederholung verwendet wird.

Docker reserviert einige Namespaces für die interne Verwendung durch die CLI. Sie sollten Ihren Schlüsseln keinen der folgenden Namespaces voranstellen:

  • com.docker.*
  • io.docker.*
  • org.dockerproject.*

Fügen Sie allen Ihren Labels Ihre eigenen voran Domain-Name, es sei denn, es gibt einen zwingenden Grund, dies nicht zu tun. Die CLI von Docker erzwingt keine der Richtlinien, aber deren Befolgung trägt dazu bei, das Risiko zu minimieren, dass ein gemeinsamer Schlüssel wie Name oder Version unbeabsichtigt überschrieben wird.

Inspecting Labels

Der Befehl docker inspect enthält eine Liste der zugewiesenen Labels als Teil seiner Ausgabe. Dies funktioniert mit Containern und Bildern, die durch ID oder Namen identifiziert werden. Auf Labels, die mit Netzwerken und Volumes verwendet werden, wird über den Unterbefehl inspect dieser CLI-Gruppen zugegriffen, z. B. docker network inspect my-network.

Werbung

Die Ausgabe von docker inspect kann so wie sie ist schwer zu verdauen sein. Der Abschnitt “Labels” wird in das an Ihr Terminal ausgegebene JSON eingebettet. Sie können das Flag –format verwenden, um die Beschriftungen isoliert anzuzeigen. Wenn Sie JSON als Ausgabeformat auswählen und den resultierenden String durch jq leiten, erhalten Sie eine farbige Liste von Labels zum einfachen Lesen.

 

docker inspect my-container –format='{{json .Config.Labels}}' | jq

Objektlisten filtern

Docker-CLI-Befehle wie docker ps und docker images, die eine Liste von Objekten erzeugen, können so gefiltert werden, dass nur Elemente mit einem bestimmten Satz von Labels angezeigt werden.

So zeigen Sie Container mit dem Demolabel example an:

docker ps –filter “label=com.example.demo=example”

Wenn Sie nach mehreren Labels filtern möchten, wiederholen Sie den Vorgang das –filter Flag:

docker ps –filter “label=a=1” –filter “label=b=2”

Manchmal möchten Sie vielleicht alle Objekte mit einem bestimmten Label anzeigen. Geben Sie den Schlüsselnamen des Labels an, aber lassen Sie den Wert weg, um dies zu erreichen:

docker ps –filter “label=com.example.demo” Werbung

Jeder Container mit dem Label com.example.demo würde in die Ausgabe des Befehls eingeschlossen, unabhängig davon, welchen Wert dem Label zugewiesen wurde.

Label Spezifikationen

Die OCI-Container-Spezifikation definiert mehrere konventionelle Labels, die gängige Anwendungsfälle für Container-Images kapseln. Diese befinden sich im Namensraum org.opencontainers.image.

  • org.opencontainers.image.created – Bilderstellungszeit.
  • org.opencontainers.image.url – URL zum Abrufen von Informationen zum Bild.
  • org.opencontainers.image.version – Version der Hauptsoftware im Container (nicht die Version des Images).
  • org.opencontainers.image.licenses – Informationen zur Container-Lizenzierung.
  • org.opencontainers.image.title – Ein lesbarer Name für den Container.

Sie können die vollständige Liste der OCI-Labels in der Spezifikation anzeigen. Es ist eine gute Idee, die OCI-Labels zu verwenden, wenn Sie feststellen, dass Sie diese Informationen zu Ihren Bildern hinzufügen. Sie helfen dabei, Ihr Bild mit Community-Tools kompatibel zu machen, die diese Metadaten aufdecken und filtern.

Hinzufügen von Labels zur Image-Erstellungszeit

Sie können Labels zum Zeitpunkt der Image-Erstellung mithilfe der LABEL-Anweisung in Ihrem Dockerfile festlegen. Die Labels werden auf das Bild angewendet, nicht auf die davon ausgehenden Container. Bilder erben auch alle Labels, die von ihren Eltern definiert wurden. Ein Layer, der ein Label festlegt, das bereits von einem früheren erstellt wurde, überschreibt den ursprünglichen Wert.

LABEL com.example.demo=example com.example.example=demo LABEL com.example.image= service

Sie können mehrere Etiketten zu einer einzigen LABEL-Anweisung kombinieren oder die Anweisung mehrmals wiederholen. Die Auswirkung ist unabhängig davon, dass letztendlich alle Labels in Ihrem Image enthalten sind.

Zusammenfassung

Labels sind ein Mechanismus, um Ihre eigenen Metadaten zu Ihren Docker-Objekten hinzuzufügen . Obwohl Labels absichtlich willkürlich und offen sind, sollten Sie beim Festlegen häufig verwendeter Felder versuchen, den OCI-Spezifikationen zu folgen.

Werbung

Mit dem Festlegen von Labels können Sie zusätzliche Informationen anhängen, die für ein Objekt relevant sein könnten . Wenn Sie in Ihrer Organisation eine Reihe von Referenzbezeichnungen definieren, kann jeder Docker Inspect ausführen, um kritische Containerdetails abzurufen, anstatt auf externe Dokumentationen zu verweisen. Mit Labels können Sie auch die Docker-CLI-Ausgabe filtern und so eine optimierte Verwaltungserfahrung bieten.