Об этом проекте

dive — это инструмент командной строки для изучения образов Docker/OCI, инспекции содержимого каждого слоя и поиска способов уменьшения размера образа. Он написан на языке Go и распространяется под лицензией MIT. ## Основное использование Анализ существующего образа по тегу, идентификатору или дайджесту: ```bash dive <your-image-tag> ``` Его также можно запустить напрямую через Docker, смонтировав сокет Docker: ```bash alias dive="docker run -ti --rm -v /var/run/docker.sock:/var/run/docker.sock docker.io/wagoodman/dive" dive nginx:latest ``` Образы можно собирать и сразу анализировать за один шаг: ```bash dive build -t <some-tag> . ``` ## Основные функции - **Содержимое образа по слоям**: выберите слой слева, чтобы просмотреть объединенное содержимое этого слоя и всех предыдущих слоев справа. По дереву файлов можно перемещаться с помощью клавиш со стрелками. - **Индикаторы изменений слоев**: файлы, которые были добавлены, изменены или удалены, выделены в дереве файлов. Представление можно переключать между изменениями для конкретного слоя или совокупными изменениями вплоть до выбранного слоя. - **Оценка эффективности образа**: нижняя левая панель отображает базовую информацию о слоях и экспериментальную метрику, оценивающую неэффективно используемое пространство (например, дублирующиеся файлы в разных слоях, перемещенные или не полностью удаленные файлы). Предоставляются как процентная оценка, так и общий объем неэффективно используемого дискового пространства. - **Быстрые циклы сборки и анализа**: замените `docker build` на `dive build` для немедленного анализа образа после сборки. - **Интеграция с CI**: при установке переменной окружения `CI=true` интерактивный интерфейс пропускается, а анализ образа выполняется с выдачей результата прохождения или сбоя на основе правил. - **Несколько источников образов**: опция `--source` позволяет выбрать источник получения образа. Поддерживаемые источники включают `docker` (по умолчанию), `docker-archive` (архив tar с диска) и `podman` (только для Linux). ## Интеграция с CI Запуск dive с `CI=true` отключает интерактивный интерфейс и возвращает статус успеха или неудачи через код завершения. Правила можно определить в файле `.dive-ci` в корне репозитория: ```yaml rules: # Сбой, если эффективность ниже X% (выражается как соотношение от 0 до 1). lowestEfficiency: 0.95 # Сбой, если объем нерационально используемого пространства равен или превышает X (в B, KB, MB, GB). highestWastedBytes: 20MB # Сбой, если нерационально используемое пространство составляет X% или более от образа (соотношение от 0 до 1). # Слой базового образа не включается в общий размер образа. highestUserWastedPercent: 0.20 ``` Путь к конфигурации CI можно переопределить с помощью параметра `--ci-config`. ## Установка Документировано несколько способов установки: - **Ubuntu/Debian**: скачайте релиз `.deb` и установите с помощью `apt`. - **Snap**: `snap install dive` с подключением к исполняемым файлам и демону Docker. В README предупреждается, что метод Snap не рекомендуется, если Docker был установлен через `apt-get`. - **RHEL/CentOS**: скачайте релиз `.rpm` и установите с помощью `rpm -i`. - **Arch Linux**: доступно в репозитории extra, установка через `pacman -S dive`. - **macOS**: доступно через 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 install github.com/wagoodman/dive@latest` (требуется Go версии 1.10 или выше; вывод версии при таком спосовании установки может быть неточным). - **Nix/NixOS**: `nix-env -iA nixos.dive` или `nix-env -iA nixpkgs.dive`. - **Образ Docker**: скачайте `docker.io/wagoodman/dive` или `ghcr.io/wagoodman/dive` и при запуске смонтируйте сокет Docker. Для альтернативных сред выполнения, таких как Colima, может потребоваться указать хост Docker, например: ```bash export DOCKER_HOST=$(docker context inspect -f '{{ .Endpoints.docker.Host }}') ``` ## Горячие клавиши Интерактивный интерфейс поддерживает клавиши для выхода, переключения между слоями и деревом файлов, фильтрации файлов, прокрутки, свертывания каталогов и переключения видимости добавленных, удаленных, измененных или неизмененных файлов. К распространенным сочетаниям относятся Tab для переключения представлений, Ctrl+F для фильтрации файлов, Пробел для сворачивания/разворачивания каталога и Ctrl+A/Ctrl+R/Ctrl+M/Ctrl+U для отображения или скрытия типов изменений файлов. ## Конфигурация Настройка не обязательна, но файл конфигурации YAML может переопределять значения по умолчанию. Примеры параметров включают движок контейнеров (`docker` или `podman`), обработку ошибок, логирование, горячие клавиши, настройки режима сравнения по умолчанию, поведение дерева файлов (состояние сворачивания и ширину панели) и параметры агрегирования слоя по умолчанию. dive ищет конфигурации в `$XDG_CONFIG_HOME/dive/*.yaml`, `$XDG_CONFIG_DIRS/dive/*.yaml`, `~/.config/dive/*.yaml` и `~/.dive.yaml`; формат `.yml` также поддерживается.