
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 구성 파일 경로를 재정의할 수 있습니다.
| 키 바인딩 | 설명 |
|---|---|
| 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 | 파일 트리 보기: 한 페이지 아래로 스크롤 |