
Инструмент для исследования каждого слоя в образе Docker
Инструмент для изучения Docker-образов, содержимого слоев и поиска способов уменьшить размер вашего Docker/OCI образа.

Чтобы проанализировать Docker-образ, просто запустите dive с тегом/id/дайджестом образа:
dive <your-image-tag>
или вы можете запустить dive через 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
или если вы хотите сначала собрать образ, а затем сразу перейти к его анализу:
dive build -t <some-tag> .
Сборка на macOS (поддерживается только 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> .
Кроме того, вы можете запустить это в вашем CI-пайплайне, чтобы убедиться, что минимальное пространство тратится впустую (это пропускает UI):
CI=true dive <your-image>

Это качество бета-версии! Не стесняйтесь создавать issue, если хотите новую функцию или нашли ошибку :)
Показ содержимого Docker-образа, разбитого по слоям
Когда вы выбираете слой слева, справа отображается содержимое этого слоя вместе со всеми предыдущими слоями. Кроме того, вы можете полностью исследовать дерево файлов с помощью клавиш со стрелками.
Отображение изменений в каждом слое
Файлы, которые были изменены, модифицированы, добавлены или удалены, отмечаются в дереве файлов. Это можно настроить для отображения изменений для конкретного слоя или совокупных изменений вплоть до этого слоя.
Оценка «эффективности образа»
Нижняя левая панель показывает основную информацию о слоях и экспериментальный показатель, который оценивает, сколько лишнего места занимает ваш образ. Это может быть из-за дублирования файлов между слоями, перемещения файлов между слоями или неполного удаления файлов. Отображаются как процентная «оценка», так и общий объем потраченного впустую места.
Быстрые циклы сборки/анализа
Вы можете собрать Docker-образ и сразу выполнить его анализ одной командой: dive build -t some-tag . Вам нужно лишь заменить команду docker build на ту же самую dive build.
Интеграция с CI
Анализируйте образ и получайте результат прохождения/неудачи на основе эффективности образа и потраченного впустую места. Просто установите CI=true в окружении при вызове любой команды dive.
Поддержка нескольких источников образов и контейнерных движков
С помощью опции --source вы можете выбрать, откуда загрузить образ контейнера:
dive <your-image> --source <source>
или
dive <source>://<your-image>
Допустимые опции source:
docker: Docker engine (опция по умолчанию)docker-archive: Docker-архив Tar с дискаpodman: Podman engine (только Linux)Ubuntu/Debian
С помощью .deb-пакетов:
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
Через 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] Метод Snap не рекомендуется, если вы установили Docker через
apt-get, так как это может нарушить работу существующего Docker-демона.См. также: 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
Доступен в extra репозитории и может быть установлен через pacman:
pacman -S dive
Mac
Если вы используете Homebrew:
brew install dive
Если вы используете MacPorts:
sudo port install dive
Или загрузите последнюю сборку для Darwin со страницы релизов.
Windows
Если вы используете Chocolatey
choco install dive
Если вы используете scoop
scoop install main/dive
Если вы используете winget:
winget install --id wagoodman.dive
Или загрузите последнюю сборку для Windows со страницы релизов.
Инструменты Go Требуется Go версии 1.10 или выше.
go install github.com/wagoodman/dive@latest
Примечание: при установке таким способом вы не увидите правильную версию при запуске dive -v.
Nix/NixOS
На NixOS:
nix-env -iA nixos.dive
На не-NixOS (Linux, Mac)
nix-env -iA nixpkgs.dive
X-CMD
x-cmd — это набор инструментов для Posix Shell, предоставляющий легковесный менеджер пакетов, написанный на shell и awk.
x env use dive
Docker
docker pull docker.io/wagoodman/dive
# or alternatively
docker pull ghcr.io/wagoodman/dive
При запуске вам нужно будет подключить файл Docker-сокета:
docker run --rm -it \
-v /var/run/docker.sock:/var/run/docker.sock \
docker.io/wagoodman/dive:latest <dive arguments...>
Docker для Windows (показаны совместимые с PowerShell переносы строк; сверните в одну строку для совместимости с Command Prompt)
docker run --rm -it `
-v /var/run/docker.sock:/var/run/docker.sock `
docker.io/wagoodman/dive:latest <dive arguments...>
Примечание: в зависимости от версии Docker, используемой локально, может потребоваться указать версию Docker API в переменной окружения:
DOCKER_API_VERSION=1.37 dive ...
или если вы запускаете с помощью 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...>
Если вы используете альтернативную среду выполнения (Colima и т.д.), то может потребоваться указать хост Docker в переменной окружения, чтобы загружать локальные образы:
export DOCKER_HOST=$(docker context inspect -f '{{ .Endpoints.docker.Host }}')