10 điểm bởi GN⁺ 2024-01-09 | 1 bình luận | Chia sẻ qua WhatsApp

Công cụ khám phá image Docker dive

  • Phân tích image Docker: Có thể phân tích image Docker bằng lệnh dive cùng tag/ID/digest của image.
  • Dùng trực tiếp lệnh Docker: Có thể thiết lập alias để dùng dive trực tiếp như một lệnh Docker.
  • Build trên Macbook: Có thể dùng dive để build và phân tích image trên Macbook chỉ hỗ trợ Docker container engine.
  • Tích hợp vào pipeline CI: Có thể phân tích image không cần UI và giảm thiểu lãng phí dung lượng bằng cách đặt biến môi trường CI=true.

Tính năng cơ bản

  • Hiển thị nội dung image Docker theo từng layer: Có thể xem nội dung của layer được chọn và nội dung hợp nhất với các layer trước đó ở phía bên phải.
  • Hiển thị nội dung thay đổi ở mỗi layer: Trong cây tệp, hiển thị các tệp đã thay đổi, chỉnh sửa, thêm mới hoặc bị xóa.
  • Ước tính "hiệu quả image": Ước tính lượng dung lượng lãng phí trong image, đồng thời cung cấp điểm hiệu quả và dung lượng tệp bị lãng phí.
  • Chu kỳ build/phân tích nhanh: Có thể build image Docker rồi phân tích ngay bằng lệnh dive build -t some-tag ..
  • Hỗ trợ nhiều nguồn image và container engine: Có thể chọn nơi lấy container image bằng tùy chọn --source.

Cách cài đặt

  • Ubuntu/Debian: Cài dive bằng curlapt.
  • RHEL/Centos: Cài dive bằng curlrpm.
  • Arch Linux: Có thể cài qua pacman.
  • Mac: Dùng Homebrew hoặc MacPorts, hoặc tải bản build Darwin từ trang phát hành.
  • Windows: Tải bản phát hành mới nhất.
  • Go tools: Cần Go phiên bản 1.10 trở lên, cài bằng go get.
  • Nix/NixOS: Dùng nix-env để cài đặt.
  • Docker: Lấy image bằng docker pull và chạy kèm tệp Docker socket.

Tích hợp CI

  • Đặt biến môi trường CI=true: Phân tích image Docker không cần UI và thể hiện trạng thái pass/fail bằng mã trả về.
  • Thiết lập quy tắc qua tệp .dive-ci: Có thể đặt tiêu chí pass/fail theo hiệu quả, lượng dung lượng lãng phí và tỷ lệ lãng phí.

Gán phím

  • Có thể thao tác các layer và chế độ xem cây tệp trong UI thông qua nhiều gán phím khác nhau.

Cấu hình UI

  • Có thể thay đổi hành vi của dive bằng cách tùy biến nhiều tùy chọn thông qua tệp cấu hình.

Ý kiến của GN⁺

  • Mức độ quan trọng: dive là công cụ rất hữu ích để tối ưu kích thước image Docker và giảm lãng phí. Điều này có thể góp phần cắt giảm chi phí hạ tầng đám mây và quản lý tài nguyên hiệu quả hơn.
  • Điểm thú vị: Khả năng phân tích chi tiết từng layer của image Docker và trực quan hóa các thay đổi là một tính năng rất đáng chú ý đối với nhà phát triển và quản trị viên hệ thống.
  • Tính hữu ích: Việc tích hợp dive vào pipeline CI/CD có thể thúc đẩy quản lý chất lượng liên tục và cải thiện hiệu quả thông qua phân tích image tự động.

1 bình luận

 
GN⁺ 2024-01-09
Ý kiến trên Hacker News
  • Crane và thư viện go-containerregistry

    • Crane rất xuất sắc trong việc thao tác image và layer, và được xây dựng dựa trên thư viện go-containerregistry.
    • Có thể thêm layer mới, sửa metadata của image hiện có (biến môi trường, label, entrypoint, v.v.).
    • Có thể "làm phẳng" nhiều layer thành một layer duy nhất, hoặc "rebase" image (áp dụng lại các thay đổi lên base image mới/được cập nhật).
    • Mọi thao tác đều diễn ra trực tiếp trên registry nên không cần Docker (dù nó vẫn hữu ích khi tạo image gốc).
    • Liên kết cách dùng Crane
  • Tính hữu ích của Dive

    • Dive rất hữu ích để hiểu cách Docker image hoạt động và cách viết Dockerfile hiệu quả.
    • Không giống như chỉ đọc tài liệu, việc nhìn thấy Dockerfile thay đổi ảnh hưởng thế nào đến cấu trúc layer kết quả giúp hiểu vấn đề hơn nhiều.
    • Dive là công cụ thiết yếu để học tập và xây dựng sự tự tin về chính xác những gì mình đang build/deploy.
    • Cũng có một công cụ khác tên là Dredge dùng để so sánh sự khác biệt giữa các layer.
    • Liên kết cách dùng Dredge
  • Một đặc điểm ít được biết đến của Dive

    • Dive không chỉ rất hữu ích mà tác giả của nó cũng là một lập trình viên tuyệt vời và làm việc cùng rất dễ chịu.
  • Câu hỏi về lý do dùng GoLang

    • Thắc mắc vì sao phần lớn các công cụ container/hạ tầng lại được viết bằng GoLang.
    • Ví dụ như Docker, Podman, nerdctl, Terraform, Kubernetes.
    • Câu hỏi liệu GoLang có mang lại lợi thế rõ ràng khi xây dựng các công cụ này hay không.
  • Tính thực dụng của Dive

    • Dùng Dive vài lần mỗi tháng, và nó hữu ích khi muốn kiểm tra xem một file cụ thể có tồn tại trong layer hay không và muốn xem nội dung file.
    • Hiện tại đang giải quyết bằng cách chạy container hoặc trích xuất nội dung file rồi duyệt thư mục.
  • Công cụ container-diff của Google

    • container-diff hữu ích để kiểm tra việc pipe một script ngẫu nhiên vào bash sẽ làm gì với hệ thống.
  • Các công cụ terminal TUI tuyệt vời khác

    • Ngoài Dive còn có các công cụ terminal TUI rất hay như lazydocker, dry.
    • Cũng có các công cụ thuộc cùng nhóm Docker.
    • Liên kết công cụ terminal
  • Vì sao Docker dùng tar archive

    • Thắc mắc vì sao Docker dùng tar archive thay vì thư mục thông thường cho nội dung layer.
    • Công cụ này giải quyết một vấn đề đáng ra không nên tồn tại ngay từ đầu.
  • Hiệu quả ấn tượng của Dive

    • Dive đã giúp ích rất nhiều lần và giúp học được nhiều điều về layer.
    • Nó tốt đến mức Docker Desktop còn mô phỏng lại chức năng đó.