Que sont les étiquettes Docker et quand les utiliser ?

0
170

Michael Vi/Shutterstock.com

Les étiquettes Docker vous permettent d'attacher des métadonnées arbitraires à vos conteneurs, images, volumes et autres ressources. Vous pouvez baliser vos objets Docker avec des informations spécifiques à votre organisation, votre flux de travail ou votre chaîne d'outils.

Les étiquettes sont censées être un système de classification ouvert que vous pouvez adapter à vos propres besoins. Voici comment créer de nouvelles étiquettes et les utiliser pour filtrer les objets renvoyés par la CLI Docker.

Types d'objets pris en charge

Vous pouvez utilisez des étiquettes avec les objets Docker suivants :

  • Conteneurs
  • Images
  • Volumes
  • Réseaux
  • Instances de démon
  • Noeuds et services Swarm

Chaque type d'objet prend en charge les étiquettes dans le cadre de son groupe de commandes CLI. Peu importe que vous utilisiez une image Docker, un réseau Docker ou un volume Docker.

Ajout d'étiquettes

Les étiquettes sont ajoutées au moment où vous créez un objet. Ils ne peuvent pas être modifiés après la création initiale ; vous devez supprimer l'objet et le remplacer par une nouvelle version si des modifications sont nécessaires. Une exception concerne les étiquettes attribuées aux nœuds et services Docker Swarm qui peuvent être mises à jour dynamiquement à tout moment.

L'indicateur –label est utilisé pour définir des étiquettes. Chaque étiquette est une paire clé-valeur avec la clé et la valeur séparées par un signe égal (=) :

docker run my-image:latest –label demo-label=example-value Publicité

Les clés de libellé peuvent contenir des caractères alphanumériques minuscules, des points (.) et des tirets (-). Ils doivent commencer et se terminer par un caractère alphanumérique. Les règles de notation DNS sont suivies, de sorte que plusieurs points consécutifs et tirets sont interdits.

Docker accepte n'importe quelle chaîne comme valeurs d'étiquette, mais sachez qu'aucune sérialisation ou transtypage ne se produit. Les valeurs complexes telles que JSON ou XML seront stockées et récupérées sous forme de chaîne simple.

Meilleures pratiques pour les étiquettes

Docker suggère quelques directives pour nommer vos étiquettes qui améliorent l'interopérabilité à travers l'écosystème. Il conseille l'utilisation d'étiquettes avec espace de noms utilisant la notation DNS inversée privilégiée par les magasins d'applications et les gestionnaires de packages :

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

Cette pratique permet d'éviter les conflits de noms de clés lorsque les étiquettes sont définies par les outils de votre système de génération. De nombreuses installations d'automatisation ajoutent leurs propres étiquettes aux objets Docker qu'elles créent pour faciliter le suivi et la gestion. Docker ne prend pas en charge les clés d'étiquette en double et l'utilisation de la même clé deux fois entraîne l'utilisation de la valeur de la dernière répétition.

Docker réserve certains espaces de noms pour un usage interne par la CLI. Vous ne devez pas préfixer vos clés avec l'un des espaces de noms suivants :

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

Préfixez tous vos libellés avec votre propre nom de domaine, sauf s'il y a une raison impérieuse de ne pas le faire. La CLI de Docker n'applique aucune des directives, mais les suivre permet de minimiser le risque qu'une clé commune comme le nom ou la version soit écrasée par inadvertance.

Inspecter Libellés

La commande docker inspect inclut une liste d'étiquettes attribuées dans le cadre de sa sortie. Cela fonctionne avec des conteneurs et des images identifiés par ID ou nom. Les étiquettes utilisées avec les réseaux et les volumes sont accessibles via la sous-commande inspect de ces groupes CLI, tels que docker network inspect my-network.

Publicité

docker inspect la sortie peut être difficile à digérer en l'état. La section des étiquettes sera enterrée dans le JSON émis vers votre terminal. Vous pouvez utiliser l'indicateur –format pour afficher les étiquettes séparément. La sélection de JSON comme format de sortie et la transmission de la chaîne résultante à travers jq vous donnent une liste colorisée d'étiquettes pour une lecture facile.

 

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

Filtrage des listes d'objets

Docker CLI les commandes telles que docker ps et docker images qui produisent une liste d'objets peuvent être filtrées pour n'afficher que les éléments avec un ensemble donné d'étiquettes.

Voici comment afficher les conteneurs avec l'étiquette de démonstration définie sur exemple :

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

Si vous souhaitez filtrer sur plusieurs étiquettes, répétez l'indicateur –filter :

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

Parfois, vous souhaiterez peut-être afficher tous les objets avec une étiquette donnée. Spécifiez le nom de clé de l'étiquette, mais omettez la valeur pour y parvenir :

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

Tout conteneur avec l'étiquette com.example.demo serait inclus dans la sortie de la commande, quelle que soit la valeur attribuée à l'étiquette.

Label Spécifications

La spécification des conteneurs OCI définit plusieurs étiquettes conventionnelles qui encapsulent des cas d'utilisation courants pour les images de conteneur. Ceux-ci existent dans l'espace de noms org.opencontainers.image.

  • org.opencontainers.image.created – Heure de création de l'image.
  • org.opencontainers.image.url – URL pour obtenir des informations sur l'image.
  • org.opencontainers.image.version – Version du logiciel principal à l'intérieur du conteneur (pas la version de l'image).
  • org.opencontainers.image.licenses – Informations sur les licences de conteneur.
  • org.opencontainers.image.title – Un nom lisible par l'homme pour le conteneur.

Vous pouvez afficher la liste complète des étiquettes OCI dans la spécification. C'est une bonne idée d'utiliser les étiquettes OCI si vous vous retrouvez à ajouter une de ces informations à vos images. Ils aident à rendre votre image compatible avec les outils communautaires qui font apparaître et filtrent ces métadonnées.

Ajout d'étiquettes au moment de la création de l'image

Vous pouvez définir des étiquettes au moment de la création de l'image à l'aide de l'instruction LABEL dans votre Dockerfile. Les étiquettes seront appliquées à l'image, pas aux conteneurs démarrés à partir de celle-ci. Les images héritent également de toutes les étiquettes définies par leurs parents. Un calque qui définit une étiquette qui a déjà été créée par une précédente remplacera la valeur d'origine.

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

Vous pouvez combiner plusieurs étiquettes en une seule instruction LABEL ou répéter l'instruction plusieurs fois. L'impact est le même, car toutes les étiquettes seront finalement incluses dans votre image.

Résumé

Les étiquettes sont un mécanisme pour ajouter vos propres métadonnées à vos objets Docker . Bien que les étiquettes soient intentionnellement arbitraires et ouvertes, vous devez essayer de suivre les spécifications OCI lors de la définition des champs couramment utilisés.

Publicité

La définition des étiquettes vous permet d'attacher toute information supplémentaire qui pourrait être pertinente pour un objet . La définition d'un ensemble d'étiquettes de référence dans votre organisation permettrait à n'importe qui d'exécuter docker inspect pour obtenir les détails critiques du conteneur, au lieu de faire des références croisées à la documentation externe. Les étiquettes vous permettent également de filtrer la sortie Docker CLI, offrant une expérience de gestion plus rationalisée.