10P by neo 3달전 | favorite | 댓글 1개

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: curlapt를 사용하여 dive 설치.
  • RHEL/Centos: curlrpm을 사용하여 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이 그 기능을 모방할 정도로 우수함.