
Uma ferramenta para explorar cada camada em uma imagem Docker.
Uma ferramenta para explorar uma imagem Docker, conteúdos de camadas e descobrir maneiras de reduzir o tamanho da sua imagem Docker/OCI.

Para analisar uma imagem Docker, basta executar dive com uma tag/id/digest da imagem:
dive <your-image-tag>
ou você pode usar dive diretamente com o Docker:
alias dive="docker run -ti --rm -v /var/run/docker.sock:/var/run/docker.sock docker.io/wagoodman/dive"
dive <your-image-tag>
# for example
dive nginx:latest
ou se você quiser construir sua imagem e ir direto para a análise:
dive build -t <some-tag> .
Construindo no macOS (suportando apenas o mecanismo de contêiner Docker):
docker run --rm -it \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$(pwd)":"$(pwd)" \
-w "$(pwd)" \
-v "$HOME/.dive.yaml":"$HOME/.dive.yaml" \
docker.io/wagoodman/dive:latest build -t <some-tag> .
Além disso, você pode executar isso em seu pipeline de CI para garantir que está mantendo o espaço desperdiçado ao mínimo (isso pula a interface):
CI=true dive <your-image>

Esta é uma versão beta! Sinta-se à vontade para abrir uma issue se quiser um novo recurso ou encontrar um bug :)
Mostrar conteúdos da imagem Docker divididos por camada
Ao selecionar uma camada à esquerda, você vê os conteúdos dessa camada combinados com todas as camadas anteriores à direita. Além disso, você pode explorar completamente a árvore de arquivos com as teclas de seta.
Indicar o que mudou em cada camada
Arquivos que foram alterados, modificados, adicionados ou removidos são indicados na árvore de arquivos. Isso pode ser ajustado para mostrar mudanças de uma camada específica ou mudanças agregadas até essa camada.
Estimar "eficiência da imagem"
O painel inferior esquerdo mostra informações básicas da camada e uma métrica experimental que estima quanto espaço desperdiçado sua imagem contém. Isso pode ser devido à duplicação de arquivos entre camadas, movimentação de arquivos entre camadas ou remoção incompleta de arquivos. Tanto uma 'pontuação' percentual quanto o espaço total desperdiçado são fornecidos.
Ciclos rápidos de construção/análise
Você pode construir uma imagem Docker e fazer uma análise imediata com um comando:
dive build -t some-tag .
Você só precisa substituir seu comando docker build pelo mesmo comando dive build.
Integração CI
Analise uma imagem e obtenha um resultado de aprovação/reprovação baseado na eficiência da imagem e espaço desperdiçado. Basta definir CI=true no ambiente ao invocar qualquer comando dive válido.
Múltiplas Fontes de Imagem e Mecanismos de Contêiner Suportados
Com a opção --source, você pode selecionar de onde buscar a imagem do contêiner:
dive <your-image> --source <source>
ou
dive <source>://<your-image>
Com opções source válidas como:
docker: mecanismo Docker (a opção padrão)docker-archive: um arquivo Tar Docker do discopodman: mecanismo Podman (apenas linux)Ubuntu/Debian
Usando debs:
DIVE_VERSION=$(curl -sL "https://api.github.com/repos/wagoodman/dive/releases/latest" | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/')
curl -fOL "https://github.com/wagoodman/dive/releases/download/v${DIVE_VERSION}/dive_${DIVE_VERSION}_linux_amd64.deb"
sudo apt install ./dive_${DIVE_VERSION}_linux_amd64.deb
Usando snap:
sudo snap install docker
sudo snap install dive
sudo snap connect dive:docker-executables docker:docker-executables
sudo snap connect dive:docker-daemon docker:docker-daemon
[!CAUTION] O método Snap não é recomendado se você instalou o Docker via
apt-get, pois pode quebrar seu daemon Docker existente.Veja também: https://github.com/wagoodman/dive/issues/546
RHEL/Centos
DIVE_VERSION=$(curl -sL "https://api.github.com/repos/wagoodman/dive/releases/latest" | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/')
curl -fOL "https://github.com/wagoodman/dive/releases/download/v${DIVE_VERSION}/dive_${DIVE_VERSION}_linux_amd64.rpm"
rpm -i dive_${DIVE_VERSION}_linux_amd64.rpm
Arch Linux
Disponível no repositório extra e pode ser instalado via pacman:
pacman -S dive
Mac
Se você usa Homebrew:
brew install dive
Se você usa MacPorts:
sudo port install dive
Ou baixe a última compilação Darwin da página de releases.
Windows
Se você usa Chocolatey
choco install dive
Se você usa scoop
scoop install main/dive
Se você usa winget:
winget install --id wagoodman.dive
Ou baixe a última compilação Windows da página de releases.
Go tools Requer Go versão 1.10 ou superior.
go install github.com/wagoodman/dive@latest
Nota: instalando desta forma você não verá uma versão adequada ao executar dive -v.
Nix/NixOS
No NixOS:
nix-env -iA nixos.dive
Em não-NixOS (Linux, Mac)
nix-env -iA nixpkgs.dive
X-CMD
x-cmd é uma caixa de ferramentas para Posix Shell, oferecendo um gerenciador de pacotes leve construído usando shell e awk.
x env use dive
Docker
docker pull docker.io/wagoodman/dive
# ou alternativamente
docker pull ghcr.io/wagoodman/dive
Ao executar, você precisará incluir o arquivo de socket Docker:
docker run --rm -it \
-v /var/run/docker.sock:/var/run/docker.sock \
docker.io/wagoodman/dive:latest <dive arguments...>
Docker para Windows (mostrando quebras de linha compatíveis com PowerShell; colapse em uma única linha para compatibilidade com Command Prompt)
docker run --rm -it `
-v /var/run/docker.sock:/var/run/docker.sock `
docker.io/wagoodman/dive:latest <dive arguments...>
Nota: dependendo da versão do docker que você está executando localmente, pode ser necessário especificar a versão da API do docker como uma variável de ambiente:
DOCKER_API_VERSION=1.37 dive ...
ou se você estiver executando com uma imagem docker:
docker run --rm -it \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DOCKER_API_VERSION=1.37 \
docker.io/wagoodman/dive:latest <dive arguments...>
se você estiver usando um runtime alternativo (Colima etc), então pode ser necessário especificar o host docker como uma variável de ambiente para puxar imagens locais:
export DOCKER_HOST=$(docker context inspect -f '{{ .Endpoints.docker.Host }}')