Nix ดีกว่าตัวสร้างอิมเมจของ Docker
- Nix มีอยู่สามมิติ: เป็นตัวจัดการแพ็กเกจ ภาษา และระบบปฏิบัติการ
- การใช้ Nix เพื่อสร้างอิมเมจ Docker มีข้อดีกว่าการใช้ตัวสร้างอิมเมจของ Docker เอง
- Nix ทำให้รู้ล่วงหน้าได้ว่ากระบวนการบิลด์ต้องใช้ dependency อะไรบ้าง และสามารถบิลด์ได้แม้ไม่มีการเชื่อมต่ออินเทอร์เน็ต
ข้อดีของ Nix
- การใช้ Nix ทำให้สร้างอิมเมจ Docker ได้อย่างมีประสิทธิภาพมากขึ้น
- Nix แยก dependency ออกเป็น Docker layer ขั้นต่ำ ทำให้เวลามีการอัปเดตจะสะท้อนเฉพาะการเปลี่ยนแปลงที่น้อยที่สุด
- หากมีหลายบริการอยู่ในรีโพซิทอรีเดียวกัน ก็สามารถแชร์ Docker layer ร่วมกันได้ จึงมีประสิทธิภาพมากขึ้น
ตัวอย่างบริการคำคมของ Douglas Adams
- อธิบายกระบวนการแพ็กเกจโปรแกรม Go ด้วย Nix และแปลงเป็นอิมเมจ Docker
- สามารถสร้างอิมเมจแบบ layered ได้ด้วยฟังก์ชัน
dockerTools.buildLayeredImage
- ผลลัพธ์คือได้ container image ทั่วไปที่สามารถนำไป deploy ได้ทุกที่
ความเห็นของ GN⁺
- การใช้ Nix เป็นวิธีที่ช่วยยกระดับการจัดการ dependency และความสามารถในการทำซ้ำของการบิลด์ในกระบวนการพัฒนาซอฟต์แวร์ได้อย่างมาก
- เมื่อเทียบกับ Docker แล้ว Nix สามารถประหยัดเวลาและทรัพยากรได้ในระยะยาว เพราะการบิลด์มีความเป็น deterministic
- อย่างไรก็ตาม แนวคิดและวิธีใช้งานแบบใหม่ของ Nix อาจค่อนข้างยากสำหรับผู้เริ่มต้น และอาจมีความท้าทายในการผสานเข้ากับ CI/CD pipeline เดิม
- เมื่อนำเทคโนโลยีนี้มาใช้ ควรคำนึงถึงการฝึกอบรมภายในทีม ช่วงเวลาปรับตัว และความเข้ากันได้กับโครงสร้างพื้นฐานเดิม
- เครื่องมืออื่นที่มีความสามารถคล้ายกับ Nix คือ Guix ซึ่งก็ให้การจัดการแพ็กเกจและการบิลด์แบบ deterministic เช่นกัน
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
พยายามจะชอบ Nix อยู่หลายครั้ง แต่ตอนนี้คิดว่าถึงเวลาต้องยอมแพ้แล้ว
Nix และ NixOS ตอนนี้มีสภาพคล้ายกับ git ก่อนยุค GitHub
ใช้เวลา 2-3 วันไปกับการ build Docker image บน Darwin และบทความนี้เหมือนกำลังเยาะเย้ยฉัน
บล็อกโพสต์นี้ไม่ได้อธิบายว่าทำไม shared Docker layers ถึงมีประโยชน์
ประสบการณ์การ build Docker image สำหรับ Java application ด้วย Nix ไม่ค่อยน่าพอใจนัก
มีประโยชน์ถ้าใช้ Nix อยู่แล้ว และหวังว่าโซลูชันจัดการแพ็กเกจแบบ declarative มากขึ้นอย่าง Nix หรือ Guix จะได้รับความนิยมในวงกว้าง
ในฐานะ platform engineer ก็อยากจะชอบ Nix แต่ก็ไม่ใช่เรื่องง่ายสำหรับทุกคน
devbox add python@3.11มากกว่าNix ไม่ค่อยเข้ากันได้กับ upstream มากนัก จนต้องใช้ความพยายามในการทำแพ็กเกจให้ไลบรารีส่วนใหญ่พอสมควร
ไม่นานมานี้ลอง build CI base image ด้วย Nix แต่ image ใหญ่เกินไป และบางงานก็ทำงานได้ไม่ถูกต้องเพราะปัญหาเรื่อง linking
กำลังใช้ Dagger อยู่ และมันเป็นความพยายามครั้งที่สองของผู้สร้าง Docker ที่แก้ปัญหาส่วนใหญ่ได้