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

Michael 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 de 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 CLI do Docker.
Tipos de objeto com suporte
Você pode usar rótulos com os seguintes objetos do Docker:
- Containers
- Imagens
- Volumes
- Redes
- Instâncias de Daemon
- nós e serviços do Swarm
Cada tipo de objeto oferece suporte a rótulos como parte de seu grupo de comandos CLI. Não importa se você está usando a imagem do docker, a rede do docker ou o volume do docker.
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 a nós e serviços do Docker Swarm que podem ser atualizados dinamicamente a qualquer momento.
O sinalizador --label é usado para definir rótulos. Cada rótulo é um par de valores-chave com a chave e o valor separados por um sinal de igual (=):
docker executa minha-imagem: mais recente --label demo-label = example-value
Publicidade
As chaves de rótulo podem conter caracteres alfanuméricos minúsculos, pontos (.) e hifens (-). 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.
Práticas recomendadas para rótulos
O Docker sugere algumas diretrizes para nomear seus rótulos que aumentam a interoperabilidade em todo o ecossistema. Ele 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 executa my-image: latest --label = com. example. demo-label = example-value
Esta 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 da 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 o 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 nome ou versão, ser substituída acidentalmente.
Inspecionando etiquetas
O comando docker inspect 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. Os rótulos usados com redes e volumes são acessados por meio do subcomando inspect desses grupos CLI, como docker network inspect my-network.
Publicidade
A saída do docker inspect 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 seu terminal. Você pode usar o sinalizador --format para ver os rótulos isoladamente. Selecionar JSON como formato de saída e canalizar a string resultante por meio de jq fornece uma lista colorida de rótulos para facilitar a leitura.
docker inspect my-container --format = '{}' | jq

Listas de objetos de filtragem
Comandos Docker CLI como docker ps e imagens docker 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 rótulo de demonstração definido como exemplo:
docker ps --filter "label = com. example. demo = example"
Se você deseja filtrar para vários rótulos, repita o sinalizador --filter:
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"
Publicidade
Qualquer contêiner com o rótulo com. example. demo seria incluído na saída do comando, independentemente do valor atribuído ao rótulo.
Especificações da 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. Eles existem no namespace org. opencontainers. image.
- org. opencontainers. image. created – Hora 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 contêiner (não a versão da imagem).
- org. opencontainers. image. licenses – Informações de licenciamento do contêiner.
- 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 exibem e filtram esses metadados.
Adicionando rótulos no tempo de construção da imagem
Você pode definir rótulos no momento da criação da imagem usando a instrução LABEL em seu Dockerfile. Os rótulos serão aplicados à imagem, não aos recipientes iniciados a partir dela. 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 uma única instrução LABEL ou repetir 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.
Publicidade
Definir rótulos permite anexar qualquer informação extra que pode ser relevante para um objeto. Definir um conjunto de rótulos de referência em sua organização permitiria que qualquer pessoa executasse o docker inspect para obter detalhes essenciais do contêiner, em vez de fazer referência cruzada à documentação externa. Os rótulos também permitem filtrar a saída da CLI do Docker, proporcionando uma experiência de gerenciamento mais simplificada.
Nenhum comentário