Об этом проекте
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` также поддерживается.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.