Las etiquetas son un mecanismo para guardar metadatos en los objetos Docker: en contenedores, imágenes, volúmenes, redes, etc. Podemos utilizar etiquetas para organizar los distintos objetos Docker que estemos utilizando.

Una etiqueta es una información del tipo clave-valor, almacenado como una cadena. Puede especificar varias etiquetas para un objeto, pero cada clave debe ser única dentro de un objeto.

Para etiquetar un contenedor en su creación utilizaremos el parámetro -l (--label). Vamos a crear varios contenedores con distintas etiquetas:

$ docker run -l servicio=web -l entorno=desarrollo -l aplicacion=apache --name prueba_web ubuntu
$ docker run -l servicio=bd -l entorno=desarrollo -l aplicacion=mysql --name prueba_bd ubuntu
$ docker run -l servicio=web -l entorno=produccion --name web ubuntu
$ docker run -l servicio=bd -l entorno=produccion --name bd ubuntu

$ docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                      PORTS     NAMES
6b5742b82a07   ubuntu    "/bin/bash"   7 seconds ago    Exited (0) 5 seconds ago              bd
30d6f1a83749   ubuntu    "/bin/bash"   19 seconds ago   Exited (0) 17 seconds ago             web
3d2ebb7ecfde   ubuntu    "/bin/bash"   39 seconds ago   Exited (0) 36 seconds ago             prueba_bd
553675a1457e   ubuntu    "/bin/bash"   52 seconds ago   Exited (0) 50 seconds ago             prueba_web

Hay que tener en cuenta que estos contenedores tendrán además de las etiquetas indicadas en su creación, las etiquetas que estén definidas en la imagen que hemos utilizado para su creación.

A la hora de listar los contenedores podemos filtrar por varios criterios, entre ellos podemos usar las etiquetas para hacer el filtro.

Por ejemplo, mostrar los contenedores que tienen una etiqueta aplicacion:

$ docker ps -a --filter="label=aplicacion"

Mostrar los contenedores que tienen la etiqueta entorno con el valor produccion:

$ docker ps -a --filter="label=entorno=produccion"

Por último, mostrar los contenedores cuyo servicio es web en el entorno de producción:

$ docker ps -a --filter="label=entorno=produccion" --filter="label=servicio=web"

Para terminar este apartado veamos un filtro que nos devuelve las etiquetas usando el comando docker inspect, por ejemplo:

$ docker inspect --format '{{range $key, $value := .Config.Labels}}{{$key}}: {{$value}}{{"\n"}}{{end}}' prueba_web
aplicacion: apache
entorno: desarrollo
org.opencontainers.image.ref.name: ubuntu
org.opencontainers.image.version: 22.04
servicio: web

Como observamos, este contenedor tiene 5 etiquetas, las tres que hemos indicado en su creación, y dos definidas en la imagen ubuntu.

Actualizado: