
Docker 이미지, 레이어 콘텐츠를 탐색하고 Docker/OCI 이미지 크기를 줄이는 방법을 발견하는 도구입니다.

Docker 이미지를 분석하려면 이미지 태그/ID/다이제스트와 함께 dive를 실행하기만 하면 됩니다:
dive <your-image-tag>
또는 Docker를 통해 직접 dive를 실행할 수 있습니다:
alias dive="docker run -ti --rm -v /var/run/docker.sock:/var/run/docker.sock docker.io/wagoodman/dive"
dive <your-image-tag>
# 예시
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>

베타 품질입니다! 새로운 기능을 원하거나 버그를 발견하면 이슈를 제출해 주세요 :)
레이어별로 분할된 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 엔진 (기본 옵션)docker-archive: 디스크의 Docker Tar 아카이브podman: Podman 엔진 (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 방식은
apt-get으로 Docker를 설치한 경우 권장되지 않습니다. 기존 Docker 데몬이 손상될 수 있습니다.
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용 도구 상자로, 셸과 awk를 사용하여 구축된 경량 패키지 관리자를 제공합니다.
x env use dive
Docker
docker pull docker.io/wagoodman/dive
# 또는
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...>
Windows용 Docker (PowerShell 호환 줄 바꿈 표시; 명령 프롬프트 호환성을 위해 한 줄로 축소)
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 }}')
환경 변수 CI=true로 dive를 실행하면 dive UI가 생략되고 Docker 이미지를 분석하여 반환 코드를 통해 합격/불합격 여부를 알려줍니다. 현재 저장소 루트에 배치할 수 있는 .dive-ci 파일을 통해 세 가지 메트릭이 지원됩니다:
rules:
# 효율성이 X% 미만으로 측정되면 실패로 표시합니다.
# 0-1 사이의 비율로 표현됩니다.
lowestEfficiency: 0.95
# 낭비된 공간의 양이 X 이상이거나 X보다 크면 실패로 표시합니다.
# B, KB, MB, GB로 표현됩니다.
highestWastedBytes: 20MB
# 낭비된 공간이 이미지의 X% 이상을 차지하면 실패로 표시합니다.
# 참고: 기본 이미지 레이어는 전체 이미지 크기에 포함되지 않습니다.
# 0-1 사이의 비율로 표현됩니다. 임계값에 도달하거나 초과하면 실패합니다.
highestUserWastedPercent: 0.20
--ci-config 옵션으로 CI 구성 파일 경로를 재정의할 수 있습니다.
별도 구성이 필요하지 않지만, 구성 파일을 생성하여 값을 재정의할 수 있습니다:
# 지원 옵션은 "docker"와 "podman"입니다.
container-engine: docker
# 이미지 아카이브를 구문 분석하는 중 오류가 발생해도 분석을 계속합니다.
ignore-errors: false
log:
enabled: true
path: ./dive.log
level: info
# 참고: 여러 바인딩을 쉼표로 구분하여 지정할 수 있습니다.
# 참고: UI 힌트는 첫 번째 바인딩에서 가져옵니다.
keybinding:
# 전역 바인딩
quit: ctrl+c
toggle-view: tab
filter-files: ctrl+f, ctrl+slash
close-filter-files: esc
up: up,k
down: down,j
left: left,h
right: right,l
# 레이어 보기 전용 바인딩
compare-all: ctrl+a
compare-layer: ctrl+l
# 파일 보기 전용 바인딩
toggle-collapse-dir: space
toggle-collapse-all-dir: ctrl+space
toggle-added-files: ctrl+a
toggle-removed-files: ctrl+r
toggle-modified-files: ctrl+m
toggle-unmodified-files: ctrl+u
toggle-filetree-attributes: ctrl+b
page-up: pgup,u
page-down: pgdn,d
diff:
# 파일 트리(오른쪽 창)에 표시할 기본 파일을 변경할 수 있습니다. 모든 diff 유형이 기본적으로 표시됩니다.
hide:
- added
- removed
- modified
- unmodified
filetree:
# 기본 디렉터리 접힘 상태
collapse-dir: false
# 파일 트리가 화면에서 차지하는 너비 비율 (0보다 크고 1보다 작아야 함)
pane-width: 0.5
# 파일 트리 옆에 파일 속성 표시
show-attributes: true
layer:
# 이 레이어와 이전 모든 레이어의 모든 변경 사항을 표시합니다.
show-aggregated-changes: false
dive는 다음 위치에서 구성을 검색합니다:
$XDG_CONFIG_HOME/dive/*.yaml$XDG_CONFIG_DIRS/dive/*.yaml~/.config/dive/*.yaml~/.dive.yaml원하는 경우 .yml을 .yaml 대신 사용할 수 있습니다.
| 키 바인딩 | 설명 |
|---|
| Ctrl + C 또는 Q | 종료 |
| Tab | 레이어 보기와 파일 트리 보기 간 전환 |
| Ctrl + F | 파일 필터링 |
| ESC | 파일 필터 닫기 |
| PageUp 또는 U | 한 페이지 위로 스크롤 |
| PageDown 또는 D | 한 페이지 아래로 스크롤 |
| 위 또는 K | 페이지 내에서 한 줄 위로 이동 |
| 아래 또는 J | 페이지 내에서 한 줄 아래로 이동 |
| Ctrl + A | 레이어 보기: 누적된 이미지 수정 사항 보기 |
| Ctrl + L | 레이어 보기: 현재 레이어 수정 사항 보기 |
| Space | 파일 트리 보기: 디렉터리 접기/펼치기 |
| Ctrl + Space | 파일 트리 보기: 모든 디렉터리 접기/펼치기 |
| Ctrl + A | 파일 트리 보기: 추가된 파일 표시/숨기기 |
| Ctrl + R | 파일 트리 보기: 제거된 파일 표시/숨기기 |
| Ctrl + M | 파일 트리 보기: 수정된 파일 표시/숨기기 |
| Ctrl + U | 파일 트리 보기: 수정되지 않은 파일 표시/숨기기 |
| Ctrl + B | 파일 트리 보기: 파일 속성 표시/숨기기 |
| PageUp 또는 U | 파일 트리 보기: 한 페이지 위로 스크롤 |
| PageDown 또는 D | 파일 트리 보기: 한 페이지 아래로 스크롤 |