GN⁺: 도커 이미지와 레이어 내용 탐색 도구 'Dive'
(github.com/wagoodman)Docker 이미지 탐색 도구 dive
-
Docker 이미지 분석:
dive
명령어와 이미지 태그/ID/다이제스트를 사용하여 Docker 이미지 분석 가능. -
Docker 명령어 직접 사용:
alias
를 설정하여dive
를 Docker 명령어로 직접 사용 가능. -
Macbook에서의 빌드: Docker 컨테이너 엔진만 지원하는 Macbook에서
dive
를 사용하여 이미지 빌드 및 분석 가능. -
CI 파이프라인 통합:
CI=true
환경 변수 설정으로 UI 없이 이미지 분석 및 공간 낭비 최소화 가능.
기본 기능
- 레이어별 Docker 이미지 내용 표시: 선택한 레이어의 내용과 이전 레이어의 결합된 내용을 오른쪽에서 확인 가능.
- 각 레이어에서 변경된 내용 표시: 파일 트리에서 변경, 수정, 추가 또는 삭제된 파일 표시.
- "이미지 효율성" 추정: 이미지에 포함된 낭비된 공간의 양을 추정하여 효율성 점수와 낭비된 파일 공간 제공.
-
빠른 빌드/분석 주기:
dive build -t some-tag .
명령어로 Docker 이미지 빌드 후 즉시 분석 가능. -
다양한 이미지 소스 및 컨테이너 엔진 지원:
--source
옵션으로 컨테이너 이미지를 가져올 위치 선택 가능.
설치 방법
-
Ubuntu/Debian:
curl
과apt
를 사용하여dive
설치. -
RHEL/Centos:
curl
과rpm
을 사용하여dive
설치. -
Arch Linux:
pacman
을 통해 설치 가능. - Mac: Homebrew 또는 MacPorts를 사용하거나, 릴리스 페이지에서 Darwin 빌드 다운로드.
- Windows: 최신 릴리스 다운로드.
-
Go tools: Go 버전 1.10 이상 필요,
go get
으로 설치. -
Nix/NixOS:
nix-env
을 사용하여 설치. -
Docker:
docker pull
로 이미지를 가져오고, 도커 소켓 파일 포함하여 실행.
CI 통합
-
환경 변수
CI=true
설정: UI 없이 Docker 이미지 분석 및 통과/실패 여부를 반환 코드로 표시. -
.dive-ci
파일을 통한 규칙 설정: 효율성, 낭비된 공간의 양 및 비율에 따른 통과/실패 기준 설정 가능.
키 바인딩
- 다양한 키 바인딩을 통해 UI 내에서 레이어 및 파일 트리 뷰 조작 가능.
UI 설정
- 설정 파일을 통해 다양한 옵션을 사용자 정의하여
dive
의 동작을 변경 가능.
GN⁺의 의견
-
중요성:
dive
는 Docker 이미지의 크기를 최적화하고 낭비를 줄이는 데 매우 유용한 도구임. 이는 클라우드 인프라 비용 절감과 효율적인 리소스 관리에 기여할 수 있음. - 흥미로움: Docker 이미지의 각 레이어를 세밀하게 분석하고 변경 사항을 시각적으로 확인할 수 있다는 점은 개발자와 시스템 관리자에게 매우 흥미로운 기능임.
-
도움됨: CI/CD 파이프라인에
dive
를 통합함으로써, 자동화된 이미지 분석을 통해 지속적인 품질 관리와 효율성 향상을 도모할 수 있음.
Hacker News 의견
-
Crane과 go-containerregistry 라이브러리
- 이미지 및 레이어 조작에 있어 Crane이 훌륭하며, 이는 go-containerregistry 라이브러리를 기반으로 함.
- 새로운 레이어 추가, 기존 이미지의 메타데이터(환경 변수, 라벨, 엔트리포인트 등) 수정이 가능.
- 다중 레이어를 단일 레이어로 "평탄화"하거나, 이미지 "리베이스"(변경 사항을 새로운/업데이트된 베이스 이미지에 재적용)가 가능.
- 모든 작업은 레지스트리에서 직접 이루어지므로 도커가 필요 없음(원본 이미지 생성 시에는 여전히 유용).
- Crane 사용법 링크
-
Dive의 유용성
- Dive는 도커 이미지 작동 방식과 효율적인 도커파일 작성법 이해에 매우 유용.
- 문서를 읽는 것과 달리, 도커파일 변경 후 결과적인 레이어 구조에 미치는 영향을 보는 것이 이해에 큰 도움.
- Dive는 학습과 정확히 무엇을 구축/배포하는지에 대한 자신감을 개발하는 데 필수적인 도구.
- 레이어 차이를 비교하는 데 사용하는 Dredge라는 다른 도구도 있음.
- Dredge 사용법 링크
-
Dive의 숨겨진 특징
- Dive는 매우 유용할 뿐만 아니라, 그 저자가 훌륭한 개발자이며 함께 일하기 매우 즐거움.
-
GoLang 사용 이유에 대한 질문
- 대부분의 컨테이너/인프라 도구가 GoLang으로 작성된 이유에 대한 궁금증.
- Docker, Podman, nerdctl, Terraform, Kubernetes 등의 예시.
- GoLang이 이러한 도구를 구축하는 데 명백한 이점을 제공하는지에 대한 질문.
-
Dive의 실용성
- Dive를 매달 여러 번 사용하며, 특정 파일이 레이어에 존재하는지 확인하고 파일 내용을 살펴보고 싶을 때 유용함.
- 현재는 컨테이너를 실행하거나 파일 내용을 추출하여 폴더를 탐색하는 방식으로 해결.
-
Google의 container-diff 도구
- container-diff는 시스템에 무엇을 할지 보여주는 무작위 스크립트를 bash로 파이프하는 것을 확인하는 데 유용함.
-
다른 훌륭한 TUI 터미널 도구들
- Dive 외에도 lazydocker, dry와 같은 훌륭한 TUI 터미널 도구들이 있음.
- 도커 범주 내의 도구들도 있음.
- 터미널 도구 링크
-
도커가 tar 아카이브를 사용하는 이유
- 도커가 레이어 내용을 위해 일반 디렉토리 대신 tar 아카이브를 사용하는 이유에 대한 의문.
- 해당 도구는 원래 존재하지 않아야 할 문제를 해결함.
-
Dive의 놀라운 효과
- Dive는 여러 번 큰 도움이 되었으며 레이어에 대해 많은 것을 배울 수 있게 함.
- Docker Desktop이 그 기능을 모방할 정도로 우수함.