Nix, Docker'ın image builder'ından daha iyidir
- Nix'in üç yönü vardır: paket yöneticisi, dil ve işletim sistemi.
- Nix kullanarak Docker image'ları oluşturmanın, Docker'ın kendi image builder'ını kullanmaya göre daha iyi yanları vardır.
- Nix, build sürecinde gereken tüm bağımlılıkların önceden bilinmesini sağlar ve internet bağlantısı olmadan da build almayı mümkün kılar.
Nix'in avantajları
- Nix kullanıldığında Docker image'ları daha verimli şekilde oluşturulabilir.
- Nix, bağımlılıkları mümkün olan en az sayıda Docker katmanına ayırır ve güncelleme sırasında yalnızca en küçük değişikliklerin yansıtılmasını sağlar.
- Birden fazla servis aynı depoda bulunduğunda, Docker katmanları servisler arasında paylaşılabildiği için verimlilik artar.
Douglas Adams alıntı servisi örneği
- Bir Go programını Nix ile paketleyip Docker image'ına dönüştürme süreci anlatılıyor.
- Katmanlı image oluşturmak için
dockerTools.buildLayeredImage fonksiyonu kullanılabilir.
- Sonuçta sıradan bir container image elde edilir ve bu image her yere deploy edilebilir.
GN⁺ görüşü
- Nix kullanmak, yazılım geliştirme sürecinde bağımlılık yönetimini ve build'lerin yeniden üretilebilirliğini büyük ölçüde iyileştirebilir.
- Docker ile karşılaştırıldığında Nix, build'lerin deterministik yapısı sayesinde uzun vadede zaman ve kaynak tasarrufu sağlayabilir.
- Ancak Nix'in yeni kavramları ve kullanım biçimi yeni başlayanlar için biraz zor olabilir; ayrıca mevcut CI/CD pipeline'larına entegre etmekte güçlük yaşanabilir.
- Bu teknolojiyi benimserken ekip içinde eğitim ve uyum süresi gerekir; mevcut altyapıyla uyumluluk da göz önünde bulundurulmalıdır.
- Nix'e benzer işlevler sunan başka bir araç da Guix'tir; o da deterministik paket yönetimi ve build sağlar.
1 yorum
Hacker News görüşleri
Nix’i sevmeye çalışmak için birçok kez uğraştım ama artık vazgeçme zamanının geldiğini düşünüyorum.
Nix ve NixOS, GitHub öncesi git’e benzer bir durumda.
Darwin’de Docker imajı oluşturmak için 2-3 gün harcadım ve bu makale sanki benimle alay ediyor.
Paylaşılan Docker katmanlarının neden faydalı olduğuna dair açıklama blog yazısında eksik.
Java uygulamaları için Docker imajlarını Nix ile oluşturma deneyimi pek keyifli değildi.
gradle2nixkullanımdan kaldırıldıktan sonra, Gradle tabanlı Java uygulamaları için Docker imajı oluşturmanın net bir alternatif yolu kalmadı.Nix’i zaten benimsediyseniz faydalı ve Nix ya da Guix gibi daha deklaratif paket yönetimi çözümlerinin yaygınlaşmasını umuyorum.
Bir platform mühendisi olarak Nix’i sevmek istiyorum ama herkes için kolay değil.
devbox add python@3.11gibi bir komutla paket eklemeyi tercih ediyorum.Nix, çoğu kütüphane için ciddi paketleme çabası gerektirecek kadar upstream ile uyumlu değil.
Kısa süre önce CI taban imajını Nix ile oluşturmayı denedim ama imaj çok büyüktü ve linking sorunları yüzünden bazı işler düzgün çalışmadı.
Dagger kullanıyorum; Docker’ın kurucularının ikinci denemesi olarak sorunların çoğunu çözüyor.