O que são etiquetas do Docker e quando você deve usá-las?


0

Foto do logotipo do Docker em um prédioMichael Vi / Shutterstock.com

Os rótulos do Docker permitem anexar metadados arbitrários a seus contêineres, imagens, volumes e outros recursos. Você pode marcar seus objetos Docker com informações específicas para sua organização, fluxo de trabalho ou conjunto de ferramentas.

Os rótulos são um sistema de classificação aberto que você pode adaptar às suas próprias necessidades. Veja como criar novos rótulos e usá-los para filtrar objetos retornados pela Docker CLI.

Tipos de objetos suportados

Você pode usar rótulos com os seguintes objetos do Docker:

  • Containers
  • Imagens
  • Volumes
  • Redes
  • Instâncias de Daemon
  • Nós e serviços de enxame

Cada tipo de objeto oferece suporte a rótulos como parte de seu grupo de comandos CLI. Não importa se você está usando docker image, docker network, ou docker volume.

Adicionando rótulos

Os rótulos são adicionados no momento em que você cria um objeto. Eles não podem ser modificados após a criação inicial; você precisa excluir o objeto e substituí-lo por uma nova versão se alterações forem necessárias. Uma exceção são os rótulos atribuídos aos nós e serviços do Docker Swarm que podem ser atualizados dinamicamente a qualquer momento.

o --label sinalizador é usado para definir rótulos. Cada rótulo é um par de valores-chave com a chave e o valor separados por um igual (=) sinal:

docker run my-image:latest --label demo-label=example-value
Propaganda

As chaves de rótulo podem conter caracteres alfanuméricos minúsculos, pontos (.) e hífens (-) Eles devem começar e terminar com um caractere alfanumérico. As regras de notação DNS são seguidas para que vários pontos e hifens consecutivos não sejam permitidos.

O Docker aceita qualquer string como valores de rótulo, embora esteja ciente de que nenhuma serialização ou conversão ocorre. Valores complexos como JSON ou XML serão armazenados e recuperados como uma string simples.

Melhores práticas para rótulos

Docker sugere algumas diretrizes para nomear seus rótulos que aumentam a interoperabilidade em todo o ecossistema. Aconselha o uso de rótulos com espaço de nomes usando a notação DNS reversa preferida por lojas de aplicativos e gerenciadores de pacotes:

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

Essa prática ajuda a evitar conflitos de nomenclatura de chave quando os rótulos são definidos por ferramentas em seu sistema de construção. Muitos recursos de automação adicionam seus próprios rótulos aos objetos Docker que criam para facilitar o rastreamento e o gerenciamento. O Docker não oferece suporte a chaves de rótulo duplicadas e o uso da mesma chave duas vezes faz com que o valor da última repetição seja usado.

O Docker reserva alguns namespaces para uso interno pela CLI. Você não deve prefixar suas chaves com nenhum dos seguintes namespaces:

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

Prefixe todas as suas etiquetas com seu próprio nome de domínio, a menos que haja uma razão convincente para não fazê-lo. A CLI do Docker não impõe nenhuma das diretrizes, mas segui-las ajuda a minimizar o risco de uma chave comum como name ou version sendo substituído involuntariamente.

Inspecionando etiquetas

o docker inspect comando inclui uma lista de rótulos atribuídos como parte de sua saída. Isso funciona com contêineres e imagens identificados por ID ou nome. Rótulos usados ​​com redes e volumes são acessados ​​por meio do inspect subcomando desses grupos CLI, como docker network inspect my-network.

Propaganda

docker inspect a saída pode ser difícil de digerir no estado em que se encontra. A seção de rótulos será enterrada dentro do JSON emitido para o seu terminal. Você pode usar o --format sinalize para ver os rótulos isoladamente. Selecionar JSON como formato de saída e canalizar a string resultante por meio de jq oferece uma lista colorida de rótulos para facilitar a leitura.

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

Filtrando Listas de Objetos

Comandos Docker CLI como docker ps e docker images que produzem uma lista de objetos podem ser filtrados para mostrar apenas itens com um determinado conjunto de rótulos.

Veja como mostrar contêineres com o demo etiqueta definida para example:

docker ps --filter "label=com.example.demo=example"

Se você deseja filtrar para vários rótulos, repita o --filter bandeira:

docker ps --filter "label=a=1" --filter "label=b=2"

Às vezes, você pode querer mostrar todos os objetos com um determinado rótulo. Especifique o nome da chave do rótulo, mas omita o valor para fazer isso:

docker ps --filter "label=com.example.demo"
Propaganda

Qualquer recipiente com o com.example.demo o rótulo seria incluído na saída do comando, independentemente do valor ao qual o rótulo foi atribuído.

Especificações de etiqueta

A especificação de contêineres OCI define vários rótulos convencionais que encapsulam casos de uso comuns para imagens de contêiner. Estes existem dentro do org.opencontainers.image namespace.

  • org.opencontainers.image.created – Tempo de criação da imagem.
  • org.opencontainers.image.url – URL para obter informações sobre a imagem.
  • org.opencontainers.image.version – Versão do software principal dentro do container (não a versão da imagem).
  • org.opencontainers.image.licenses – Informações sobre licenciamento de contêineres.
  • org.opencontainers.image.title – Um nome legível para o contêiner.

Você pode ver a lista completa de rótulos OCI na especificação. É uma boa ideia usar os rótulos OCI se você acabar adicionando alguma dessas informações às suas imagens. Eles ajudam a tornar sua imagem compatível com as ferramentas da comunidade que revelam e filtram esses metadados.

Adicionando rótulos no momento da criação da imagem

Você pode definir rótulos no momento da criação da imagem usando o LABEL instrução em seu Dockerfile. Os rótulos serão aplicados ao imagem, não para os contêineres iniciados a partir dele. As imagens também herdam quaisquer rótulos definidos por seus pais. Uma camada que define um rótulo que já foi criado por um anterior substituirá o valor original.

LABEL com.example.demo=example com.example.example=demo

LABEL com.example.image=service

Você pode combinar vários rótulos em um único LABEL instrução ou repita a instrução várias vezes. O impacto é o mesmo, pois todos os rótulos serão incluídos em sua imagem.

Resumo

Os rótulos são um mecanismo para adicionar seus próprios metadados aos seus objetos Docker. Embora os rótulos sejam intencionalmente arbitrários e abertos, você deve tentar seguir as especificações OCI ao definir os campos comumente usados.

Propaganda

Definir rótulos permite anexar qualquer informação extra que possa ser relevante para um objeto. Definir um conjunto de rótulos de referência em sua organização permitiria que qualquer pessoa executasse docker inspect para obter detalhes críticos do contêiner, em vez de fazer referência cruzada à documentação externa. Os rótulos também permitem filtrar a saída do Docker CLI, fornecendo uma experiência de gerenciamento mais simplificada.


Like it? Share with your friends!

0

What's Your Reaction?

hate hate
0
hate
confused confused
0
confused
fail fail
0
fail
fun fun
0
fun
geeky geeky
0
geeky
love love
0
love
lol lol
0
lol
omg omg
0
omg
win win
0
win

0 Comments

Your email address will not be published. Required fields are marked *