10 pontos por GN⁺ 2024-01-09 | 1 comentários | Compartilhar no WhatsApp

Ferramenta de exploração de imagens Docker dive

  • Análise de imagens Docker: é possível analisar imagens Docker usando o comando dive e a tag/ID/digest da imagem.
  • Uso direto como comando Docker: é possível configurar um alias para usar dive diretamente como um comando do Docker.
  • Build no Macbook: em Macbooks que suportam apenas o Docker container engine, é possível usar o dive para fazer build e analisar imagens.
  • Integração com pipeline de CI: ao definir a variável de ambiente CI=true, é possível analisar imagens sem UI e minimizar desperdício de espaço.

Recursos básicos

  • Exibição do conteúdo da imagem Docker por camada: é possível verificar, à direita, o conteúdo da camada selecionada e o conteúdo combinado com as camadas anteriores.
  • Exibição das mudanças em cada camada: mostra, na árvore de arquivos, os arquivos alterados, modificados, adicionados ou removidos.
  • Estimativa da "eficiência da imagem": estima a quantidade de espaço desperdiçado incluído na imagem, fornecendo uma pontuação de eficiência e o espaço de arquivos desperdiçado.
  • Ciclo rápido de build/análise: com o comando dive build -t some-tag ., é possível fazer o build da imagem Docker e analisá-la imediatamente.
  • Suporte a várias fontes de imagem e container engines: com a opção --source, é possível escolher de onde obter a imagem de contêiner.

Como instalar

  • Ubuntu/Debian: instalar o dive usando curl e apt.
  • RHEL/Centos: instalar o dive usando curl e rpm.
  • Arch Linux: instalação disponível via pacman.
  • Mac: usar Homebrew ou MacPorts, ou baixar o build para Darwin na página de releases.
  • Windows: baixar a release mais recente.
  • Go tools: requer Go versão 1.10 ou superior, com instalação via go get.
  • Nix/NixOS: usar nix-env para instalar.
  • Docker: obter a imagem com docker pull e executar incluindo o arquivo do socket do Docker.

Integração com CI

  • Definir a variável de ambiente CI=true: analisa a imagem Docker sem UI e indica aprovação/falha pelo código de retorno.
  • Configuração de regras via arquivo .dive-ci: permite definir critérios de aprovação/falha com base em eficiência, quantidade de espaço desperdiçado e proporção.

Atalhos de teclado

  • É possível manipular as visualizações de camadas e da árvore de arquivos na UI por meio de vários atalhos de teclado.

Configuração da UI

  • É possível alterar o comportamento do dive personalizando várias opções por meio de um arquivo de configuração.

Opinião do GN⁺

  • Importância: dive é uma ferramenta muito útil para otimizar o tamanho das imagens Docker e reduzir desperdícios. Isso pode contribuir para a redução de custos de infraestrutura em nuvem e para uma gestão mais eficiente de recursos.
  • Interessante: a possibilidade de analisar detalhadamente cada camada de uma imagem Docker e verificar visualmente as alterações é um recurso muito interessante para desenvolvedores e administradores de sistemas.
  • Útil: ao integrar o dive ao pipeline de CI/CD, é possível promover controle contínuo de qualidade e ganhos de eficiência por meio de análise automatizada de imagens.

1 comentários

 
GN⁺ 2024-01-09
Opiniões no Hacker News
  • Crane e a biblioteca go-containerregistry

    • O Crane é excelente para manipular imagens e camadas, sendo baseado na biblioteca go-containerregistry.
    • Permite adicionar novas camadas e modificar metadados de imagens existentes, como variáveis de ambiente, labels e entrypoint.
    • Também é possível "achatar" várias camadas em uma única camada ou fazer "rebase" da imagem (reaplicar alterações sobre uma imagem base nova/atualizada).
    • Tudo é feito diretamente no registry, então não precisa do Docker (embora ele ainda seja útil para criar a imagem original).
    • Link de uso do Crane
  • A utilidade do Dive

    • O Dive é muito útil para entender como imagens Docker funcionam e como escrever Dockerfiles eficientes.
    • Diferente de apenas ler a documentação, ver o impacto das mudanças no Dockerfile sobre a estrutura resultante das camadas ajuda muito na compreensão.
    • O Dive é uma ferramenta essencial para aprender e desenvolver confiança sobre o que exatamente está sendo construído e implantado.
    • Há também outra ferramenta chamada Dredge, usada para comparar diferenças entre camadas.
    • Link de uso do Dredge
  • Um aspecto oculto do Dive

    • Além de ser muito útil, o autor do Dive é um excelente desenvolvedor e é muito agradável trabalhar com ele.
  • Pergunta sobre o uso de GoLang

    • Curiosidade sobre por que a maioria das ferramentas de contêiner/infraestrutura é escrita em GoLang.
    • Exemplos incluem Docker, Podman, nerdctl, Terraform e Kubernetes.
    • Pergunta se GoLang oferece vantagens claras para construir esse tipo de ferramenta.
  • A praticidade do Dive

    • Uso o Dive várias vezes por mês, e ele é útil quando quero verificar se um arquivo específico existe em uma camada e inspecionar seu conteúdo.
    • Hoje resolvo isso executando o contêiner ou extraindo o conteúdo dos arquivos para navegar pelas pastas.
  • A ferramenta container-diff do Google

    • O container-diff é útil para verificar scripts aleatórios sendo enviados por pipe para o bash, mostrando o que eles fariam no sistema.
  • Outras ótimas ferramentas TUI de terminal

    • Além do Dive, há outras ótimas ferramentas TUI de terminal, como lazydocker e dry.
    • Também existem ferramentas dentro da categoria Docker.
    • Link de ferramentas de terminal
  • Por que o Docker usa arquivos tar

    • Dúvida sobre por que o Docker usa arquivos tar para o conteúdo das camadas em vez de diretórios comuns.
    • A ferramenta resolve um problema que, em princípio, não deveria existir.
  • O efeito impressionante do Dive

    • O Dive já ajudou muito várias vezes e permite aprender bastante sobre camadas.
    • É tão bom que o Docker Desktop chegou a imitar sua funcionalidade.