10 คะแนน โดย GN⁺ 2024-01-09 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

เครื่องมือสำรวจอิมเมจ Docker dive

  • วิเคราะห์อิมเมจ Docker: สามารถวิเคราะห์อิมเมจ Docker ได้โดยใช้คำสั่ง dive พร้อมแท็ก/ID/ไดเจสต์ของอิมเมจ
  • ใช้คำสั่ง Docker ได้โดยตรง: สามารถตั้งค่า alias เพื่อใช้ dive เป็นคำสั่ง Docker ได้โดยตรง
  • การบิลด์บน Macbook: บน Macbook ที่รองรับเฉพาะ Docker container engine สามารถใช้ dive เพื่อบิลด์และวิเคราะห์อิมเมจได้
  • ผสานเข้ากับ CI pipeline: ตั้งค่าตัวแปรสภาพแวดล้อม CI=true เพื่อวิเคราะห์อิมเมจโดยไม่มี UI และลดการใช้พื้นที่อย่างสิ้นเปลืองให้เหลือน้อยที่สุด

ความสามารถพื้นฐาน

  • แสดงเนื้อหาอิมเมจ Docker แยกตามเลเยอร์: สามารถดูเนื้อหาของเลเยอร์ที่เลือกและเนื้อหาที่รวมกับเลเยอร์ก่อนหน้าได้ทางด้านขวา
  • แสดงสิ่งที่เปลี่ยนแปลงในแต่ละเลเยอร์: แสดงไฟล์ที่มีการเปลี่ยนแปลง แก้ไข เพิ่ม หรือลบใน file tree
  • ประเมิน "ประสิทธิภาพของอิมเมจ": ประเมินปริมาณพื้นที่สูญเปล่าที่รวมอยู่ในอิมเมจ พร้อมแสดงคะแนนประสิทธิภาพและพื้นที่ไฟล์ที่สูญเปล่า
  • รอบการบิลด์/วิเคราะห์ที่รวดเร็ว: สามารถบิลด์อิมเมจ Docker แล้ววิเคราะห์ได้ทันทีด้วยคำสั่ง dive build -t some-tag .
  • รองรับแหล่งที่มาของอิมเมจและ container engine ที่หลากหลาย: สามารถเลือกแหล่งที่มาที่จะดึง container image ได้ด้วยออปชัน --source

วิธีติดตั้ง

  • Ubuntu/Debian: ติดตั้ง dive ด้วย curl และ apt
  • RHEL/Centos: ติดตั้ง dive ด้วย curl และ rpm
  • Arch Linux: ติดตั้งผ่าน pacman
  • Mac: ใช้ Homebrew หรือ MacPorts หรือติดตั้ง Darwin build จากหน้า releases
  • Windows: ดาวน์โหลดรีลีสล่าสุด
  • Go tools: ต้องใช้ Go เวอร์ชัน 1.10 ขึ้นไป และติดตั้งด้วย go get
  • Nix/NixOS: ใช้ nix-env เพื่อติดตั้ง
  • Docker: ดึงอิมเมจด้วย docker pull แล้วรันโดยรวมไฟล์ Docker socket เข้าไปด้วย

การผสานกับ CI

  • ตั้งค่าตัวแปรสภาพแวดล้อม CI=true: วิเคราะห์อิมเมจ Docker โดยไม่มี UI และแสดงผลผ่าน/ไม่ผ่านด้วย return code
  • ตั้งกฎผ่านไฟล์ .dive-ci: สามารถกำหนดเกณฑ์ผ่าน/ไม่ผ่านตามประสิทธิภาพ ปริมาณพื้นที่สูญเปล่า และสัดส่วนของพื้นที่สูญเปล่าได้

การกำหนดปุ่มลัด

  • สามารถควบคุมมุมมองเลเยอร์และ file tree ภายใน UI ได้ผ่านปุ่มลัดหลากหลายแบบ

การตั้งค่า UI

  • สามารถปรับแต่งตัวเลือกต่างๆ ผ่านไฟล์ตั้งค่าเพื่อเปลี่ยนพฤติกรรมของ dive ได้

ความคิดเห็นของ GN⁺

  • ความสำคัญ: dive เป็นเครื่องมือที่มีประโยชน์มากสำหรับการปรับขนาดอิมเมจ Docker ให้เหมาะสมและลดความสูญเปล่า ซึ่งช่วยลดต้นทุนโครงสร้างพื้นฐานคลาวด์และสนับสนุนการจัดการทรัพยากรอย่างมีประสิทธิภาพ
  • ความน่าสนใจ: ความสามารถในการวิเคราะห์แต่ละเลเยอร์ของอิมเมจ Docker อย่างละเอียดและตรวจสอบการเปลี่ยนแปลงแบบมองเห็นได้ เป็นฟีเจอร์ที่น่าสนใจมากสำหรับนักพัฒนาและผู้ดูแลระบบ
  • ประโยชน์ใช้งาน: การผสาน dive เข้ากับ CI/CD pipeline ช่วยให้สามารถวิเคราะห์อิมเมจแบบอัตโนมัติ เพื่อยกระดับการควบคุมคุณภาพอย่างต่อเนื่องและเพิ่มประสิทธิภาพได้

1 ความคิดเห็น

 
GN⁺ 2024-01-09
ความคิดเห็นบน Hacker News
  • Crane และไลบรารี go-containerregistry

    • Crane ยอดเยี่ยมมากสำหรับการจัดการอิมเมจและเลเยอร์ และสร้างอยู่บนไลบรารี go-containerregistry
    • สามารถเพิ่มเลเยอร์ใหม่ แก้ไขเมทาดาทาของอิมเมจที่มีอยู่แล้ว (ตัวแปรสภาพแวดล้อม, label, entrypoint เป็นต้น)
    • สามารถ "flatten" หลายเลเยอร์ให้เป็นเลเยอร์เดียว หรือ "rebase" อิมเมจ (นำการเปลี่ยนแปลงไปใช้ซ้ำกับ base image ใหม่/ที่อัปเดตแล้ว)
    • ทุกอย่างทำได้โดยตรงจาก registry จึงไม่จำเป็นต้องใช้ Docker (แม้ยังมีประโยชน์ตอนสร้างอิมเมจต้นฉบับ)
    • ลิงก์วิธีใช้ Crane
  • ความมีประโยชน์ของ Dive

    • Dive มีประโยชน์มากในการทำความเข้าใจว่า Docker image ทำงานอย่างไร และจะเขียน Dockerfile อย่างมีประสิทธิภาพได้อย่างไร
    • ต่างจากการอ่านเอกสาร การได้เห็นว่าหลังแก้ Dockerfile แล้วส่งผลต่อโครงสร้างเลเยอร์อย่างไร ช่วยให้เข้าใจได้มาก
    • Dive เป็นเครื่องมือสำคัญทั้งสำหรับการเรียนรู้และการสร้างความมั่นใจว่าเรากำลัง build/deploy อะไรอยู่กันแน่
    • ยังมีเครื่องมืออีกตัวชื่อ Dredge ที่ใช้เปรียบเทียบความต่างของเลเยอร์
    • ลิงก์วิธีใช้ Dredge
  • คุณสมบัติที่ซ่อนอยู่ของ Dive

    • Dive ไม่ได้มีแค่ประโยชน์มากเท่านั้น ผู้เขียนยังเป็นนักพัฒนาที่ยอดเยี่ยมและร่วมงานด้วยสนุกมาก
  • คำถามว่าทำไมถึงใช้ GoLang

    • สงสัยว่าทำไมเครื่องมือด้านคอนเทนเนอร์/อินฟราจำนวนมากถึงเขียนด้วย GoLang
    • ตัวอย่างเช่น Docker, Podman, nerdctl, Terraform, Kubernetes
    • ตั้งคำถามว่า GoLang มีข้อได้เปรียบที่ชัดเจนสำหรับการสร้างเครื่องมือเหล่านี้หรือไม่
  • ความใช้งานได้จริงของ Dive

    • ใช้ Dive หลายครั้งต่อเดือน และมีประโยชน์เมื่อต้องการตรวจสอบว่าไฟล์บางไฟล์มีอยู่ในเลเยอร์หรือไม่ รวมถึงอยากดูเนื้อหาไฟล์
    • ตอนนี้แก้ปัญหาโดยรันคอนเทนเนอร์หรือแตกเนื้อหาไฟล์ออกมาเพื่อไล่ดูในโฟลเดอร์
  • เครื่องมือ container-diff ของ Google

    • container-diff มีประโยชน์ในการตรวจสอบการ pipe สคริปต์สุ่มเข้า bash เพื่อดูว่ามันจะทำอะไรกับระบบ
  • เครื่องมือ TUI บนเทอร์มินัลดี ๆ ตัวอื่น

    • นอกจาก Dive แล้วยังมีเครื่องมือ TUI บนเทอร์มินัลที่ยอดเยี่ยมอย่าง lazydocker และ dry
    • ยังมีเครื่องมือในหมวด Docker อีกหลายตัวด้วย
    • ลิงก์เครื่องมือเทอร์มินัล
  • เหตุผลที่ Docker ใช้ tar archive

    • สงสัยว่าทำไม Docker ถึงใช้ tar archive สำหรับเนื้อหาเลเยอร์แทนที่จะใช้ไดเรกทอรีปกติ
    • เครื่องมือนี้กำลังแก้ปัญหาที่แต่เดิมไม่ควรต้องมี
  • ผลลัพธ์อันน่าทึ่งของ Dive

    • Dive ช่วยได้มากหลายครั้ง และทำให้เรียนรู้เรื่องเลเยอร์ได้มาก
    • ดีมากจน Docker Desktop ถึงกับเลียนแบบฟังก์ชันของมัน