Compartir comentarios
Las respuestas se generan en base a la documentación.

Etiquetas de objetos de Docker

Las etiquetas (labels) son un mecanismo para aplicar metadatos a los objetos de Docker, que incluyen:

  • Imágenes
  • Contenedores
  • Daemons locales
  • Volúmenes
  • Redes
  • Nodos de Swarm
  • Servicios de Swarm

Puedes utilizar las etiquetas para organizar tus imágenes, registrar información de licencias, anotar relaciones entre contenedores, volúmenes y redes, o de cualquier forma que tenga sentido para tu negocio o aplicación.

Claves y valores de las etiquetas

Una etiqueta es un par clave-valor, almacenado como una cadena de texto. Puedes especificar múltiples etiquetas para un objeto, pero cada clave debe ser única dentro de un mismo objeto. Si a la misma clave se le asignan varios valores, el valor escrito más recientemente sobrescribe todos los valores anteriores.

Recomendaciones sobre el formato de las claves

La clave de una etiqueta es el lado izquierdo del par clave-valor. Las claves son cadenas alfanuméricas que pueden contener puntos (.), guiones bajos (_), barras (/) y guiones (-). La mayoría de los usuarios de Docker utilizan imágenes creadas por otras organizaciones, y las siguientes pautas ayudan a prevenir la duplicación involuntaria de etiquetas entre objetos, especialmente si planeas utilizar etiquetas como mecanismo de automatización.

  • Los autores de herramientas de terceros deben anteponer a cada clave de etiqueta la notación DNS inversa de un dominio de su propiedad, como com.example.mi-etiqueta.
  • No utilices un dominio en la clave de tu etiqueta sin el permiso del propietario del dominio.
  • Los espacios de nombres com.docker.*, io.docker.* y org.dockerproject.* están reservados por Docker para uso interno.
  • Las claves de etiqueta deben comenzar y terminar con una letra minúscula y solo deben contener caracteres alfanuméricos en minúscula, el carácter de punto (.) y el carácter de guion (-). No se permiten puntos o guiones consecutivos.
  • El carácter de punto (.) separa los "campos" del espacio de nombres. Las claves de etiqueta sin espacios de nombres están reservadas para el uso de la CLI, lo que permite a los usuarios de la CLI etiquetar interactivamente objetos de Docker utilizando cadenas más cortas y fáciles de escribir.

Estas pautas no se aplican obligatoriamente en la actualidad y pueden aplicarse pautas adicionales a casos de uso específicos.

Pautas para los valores

Los valores de las etiquetas pueden contener cualquier tipo de datos que se pueda representar como una cadena de texto, incluyendo (entre otros) JSON, XML, CSV o YAML. El único requisito es que el valor se serialice primero en una cadena de texto, utilizando un mecanismo específico para el tipo de estructura. Por ejemplo, para serializar JSON en una cadena, podrías utilizar el método JavaScript JSON.stringify().

Dado que Docker no deserializa el valor, no puedes tratar un documento JSON o XML como una estructura anidada al realizar consultas o filtrar por valor de etiqueta, a menos que incorpores esta funcionalidad en herramientas de terceros.

Gestionar etiquetas en los objetos

Cada tipo de objeto compatible con etiquetas dispone de mecanismos para añadirlas, gestionarlas y utilizarlas en relación con ese tipo de objeto.

Las etiquetas en imágenes, contenedores, daemons locales, volúmenes y redes son estáticas durante la vida útil del objeto. Para cambiar estas etiquetas, debes volver a crear el objeto. Las etiquetas en los nodos y servicios de Swarm se pueden actualizar dinámicamente.

Imágenes

Añade etiquetas a las imágenes utilizando la instrucción LABEL en un Dockerfile:

LABEL com.example.version="1.0"
LABEL com.example.description="Web application"

También puedes establecer etiquetas en el momento de la construcción con el flag --label, sin necesidad de una instrucción LABEL en el Dockerfile:

$ docker build --label "com.example.version=1.0" -t myapp .

Inspecciona las etiquetas en una imagen utilizando docker inspect:

$ docker inspect --format='{{json .Config.Labels}}' myapp

Filtra imágenes por etiqueta con docker image ls --filter:

$ docker image ls --filter "label=com.example.version"

Contenedores

Invalida o añade etiquetas al iniciar un contenedor con docker run --label:

$ docker run --label "com.example.env=prod" myapp

Inspecciona las etiquetas en un contenedor:

$ docker inspect --format='{{json .Config.Labels}}' mycontainer

Filtra contenedores por etiqueta con docker container ls --filter:

$ docker container ls --filter "label=com.example.env=prod"

Daemons locales de Docker

Añade etiquetas al daemon de Docker pasando flags --label al iniciar dockerd, o configurando "labels" en el archivo de configuración del daemon:

{
  "labels": ["com.example.environment=production"]
}

Visualiza las etiquetas del daemon con docker system info.

Volúmenes

Añade etiquetas al crear un volumen:

$ docker volume create --label "com.example.purpose=database" myvolume

Inspecciona las etiquetas de un volumen:

$ docker volume inspect myvolume --format='{{json .Labels}}'

Filtra volúmenes por etiqueta con docker volume ls --filter:

$ docker volume ls --filter "label=com.example.purpose"

Redes

Añade etiquetas al crear una red:

$ docker network create --label "com.example.purpose=frontend" mynetwork

Inspecciona las etiquetas de una red:

$ docker network inspect mynetwork --format='{{json .Labels}}'

Filtra redes por etiqueta con docker network ls --filter:

$ docker network ls --filter "label=com.example.purpose"

Nodos de Swarm

Servicios de Swarm