Que sont les étiquettes Docker et quand les utiliser ? – CloudSavvy IT
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, flux de travail ou 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 Docker CLI.
Sommaire
Types d’objets pris en charge
Vous pouvez utiliser des étiquettes avec les objets Docker suivants :
- Conteneurs
- Images
- Volumes
- Réseaux
- Instances de démon
- Nœuds 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 docker image
, docker network
, ou docker volume
.
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.
Les --label
flag 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 égal (=
) signe:
docker run my-image:latest --label demo-label=example-value
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 périodes consécutives 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é dans 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 des outils dans 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 une utilisation 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 toutes vos étiquettes avec votre propre nom de domaine, à moins qu’il n’y ait une raison impérieuse de ne pas le faire. La CLI de Docker n’applique aucune des directives, mais les suivre aide à minimiser le risque d’une clé commune comme name
ou version
être écrasé par inadvertance.
Inspection des étiquettes
Les docker inspect
La commande 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 le inspect
sous-commande de ces groupes CLI, comme docker network inspect my-network
.
docker inspect
la sortie peut être difficile à digérer telle quelle. La section des étiquettes sera enterrée dans le JSON émis vers votre terminal. Vous pouvez utiliser le --format
flag pour afficher les étiquettes séparément. Sélection de JSON comme format de sortie et transfert de la chaîne résultante à travers jq
vous donne une liste colorisée d’étiquettes pour une lecture facile.
docker inspect my-container --format="{{json .Config.Labels}}" | jq
Filtrage des listes d’objets
Commandes Docker CLI comme docker ps
et docker images
qui produisent une liste d’objets peuvent être filtrés pour n’afficher que les éléments avec un ensemble donné d’étiquettes.
Voici comment afficher des conteneurs avec le demo
étiquette définie sur example
:
docker ps --filter "label=com.example.demo=example"
Si vous souhaitez filtrer sur plusieurs étiquettes, répétez la --filter
drapeau:
docker ps --filter "label=a=1" --filter "label=b=2"
Parfois, vous voudrez peut-être afficher tous les objets avec une étiquette donnée. Spécifiez le nom de clé du libellé, mais omettez la valeur pour y parvenir :
docker ps --filter "label=com.example.demo"
Tout conteneur avec le com.example.demo
label serait inclus dans la sortie de la commande, quelle que soit la valeur qui lui a été attribuée.
Spécifications de l’étiquette
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 au sein du org.opencontainers.image
espace de noms.
org.opencontainers.image.created
– Temps 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 (ne pas la version de l’image).org.opencontainers.image.licenses
– Informations de licence 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 surface 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 en utilisant le LABEL
instructions dans votre Dockerfile. Les étiquettes seront apposées sur le image, pas aux conteneurs qui en sont partis. Les images héritent également de toutes les étiquettes définies par leurs parents. Une couche 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 LABEL
instruction ou répéter l’instruction plusieurs fois. L’impact est le même indépendamment du fait que toutes les étiquettes seront finalement incluses dans votre image.
Sommaire
Les étiquettes sont un mécanisme permettant d’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.
La définition d’étiquettes vous permet d’attacher toute information supplémentaire susceptible d’ê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 des détails critiques sur le 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.