4 poin oleh GN⁺ 2024-03-17 | 1 komentar | Bagikan ke WhatsApp

Nix lebih baik daripada image builder Docker

  • Nix memiliki tiga aspek: manajer paket, bahasa, dan sistem operasi.
  • Ada keunggulan saat menggunakan Nix untuk membuat image Docker dibandingkan image builder bawaan Docker.
  • Nix memungkinkan semua dependensi yang diperlukan diketahui sebelumnya dalam proses build, dan build juga dapat dilakukan tanpa koneksi internet.

Keunggulan Nix

  • Dengan Nix, image Docker dapat dibuat dengan lebih efisien.
  • Nix membagi dependensi ke dalam layer Docker seminimal mungkin sehingga saat pembaruan hanya perubahan minimum yang diterapkan.
  • Jika beberapa layanan berada dalam repositori yang sama, layer Docker dapat dibagikan satu sama lain sehingga lebih efisien.

Contoh layanan kutipan Douglas Adams

  • Menjelaskan proses memaketkan program Go dengan Nix lalu mengubahnya menjadi image Docker.
  • Fungsi dockerTools.buildLayeredImage dapat digunakan untuk membuat image berlapis.
  • Hasil akhirnya adalah image container biasa yang dapat diterapkan di mana saja.

Opini GN⁺

  • Menggunakan Nix dapat sangat meningkatkan pengelolaan dependensi dan reproduksibilitas build dalam proses pengembangan perangkat lunak.
  • Dibandingkan Docker, Nix dapat menghemat waktu dan sumber daya dalam jangka panjang berkat sifat build-nya yang deterministik.
  • Namun, konsep dan cara penggunaan Nix yang baru bisa terasa agak sulit bagi pemula, dan integrasinya ke pipeline CI/CD yang sudah ada dapat menimbulkan tantangan.
  • Saat mengadopsi teknologi ini, perlu mempertimbangkan pelatihan tim, masa adaptasi, dan kompatibilitas dengan infrastruktur yang sudah ada.
  • Alat lain yang menawarkan fungsi serupa dengan Nix adalah Guix, yang juga menyediakan manajemen paket dan build yang deterministik.

1 komentar

 
GN⁺ 2024-03-17
Komentar Hacker News
  • Saya sudah beberapa kali mencoba untuk menyukai Nix, tetapi sekarang rasanya saatnya menyerah.

    • Saya punya dua sistem yang menggunakan Nix, tetapi saya takut menyentuhnya.
    • Secara teori Nix itu idempoten dan deterministik, tetapi jika tidak benar-benar memahami seluruh bagian dependensinya, Anda bisa berhadapan dengan hasil yang aneh dan error yang tidak membantu.
    • Dokumentasinya sangat buruk, dan tutorialnya hanya sedikit membantu.
    • Kekuatan Docker justru ada pada kekacauannya sendiri; dengan pemahaman dasar tentang shell dan package manager saja, Anda sudah bisa membangun hampir apa pun dengan mudah.
  • Nix dan NixOS berada pada tahap yang mirip dengan git sebelum GitHub.

    • Ide dasarnya bertumpu pada ilmu komputer yang lebih serius dibanding SVN atau Docker saat ini.
    • Dengan rilis flox, situasinya mungkin sudah berubah, dan flox mudah digunakan.
    • Tanpa flakes dan nix-command, Nix nyaris tidak masuk akal, tetapi keduanya masih eksperimental dan nonaktif secara default.
    • Nix/NixOS atau sesuatu yang serupa akan membawa Docker ke kondisi yang sama, tetapi itu tidak akan terjadi sebelum datangnya momen GitHub.
  • Saya menghabiskan 2-3 hari untuk membangun image Docker di Darwin, dan artikel ini terasa seperti mengejek saya.

    • Nix adalah alat terbaik untuk mencapai apa yang Anda inginkan, tetapi kadang ada sudut gelap yang menguras jiwa.
  • Penjelasan tentang mengapa layer Docker bersama itu berguna tidak ada di postingan blog.

    • Itu berguna karena caching. Semakin banyak image yang berbagi layer yang sama, semakin baik caching-nya.
    • Nix sudah menyimpan dependensi melalui hash, sehingga layer akan selalu sama untuk versi dan konfigurasi yang sama.
  • Pengalaman membangun image Docker untuk aplikasi Java dengan Nix tidak terlalu menyenangkan.

    • Setelah gradle2nix dihentikan, tidak ada alternatif yang jelas untuk membangun image Docker bagi aplikasi Java berbasis Gradle.
  • Berguna jika Anda sudah mengadopsi Nix, dan saya berharap solusi manajemen paket yang lebih deklaratif seperti Nix atau Guix menjadi lebih populer.

    • Jika Anda ingin mengadopsi Nix secara bertahap sambil tetap menggunakan Docker, ada pendekatan alternatif untuk membangun konfigurasi Nix sambil tetap mempertahankan Dockerfile.
  • Sebagai platform engineer, saya ingin menyukai Nix, tetapi itu tidak mudah bagi semua orang.

    • Misalnya, saya lebih suka menambahkan paket seperti devbox add python@3.11.
  • Nix tidak kompatibel dengan upstream sampai-sampai untuk sebagian besar library dibutuhkan upaya packaging yang cukup besar.

    • Untuk library C atau C++ yang kompleks, membungkus semuanya untuk Nix menjadi bagian pekerjaan yang cukup besar.
  • Baru-baru ini saya mencoba membangun base image CI dengan Nix, tetapi image-nya terlalu besar dan beberapa pekerjaan tidak berjalan dengan benar karena masalah linking.

    • Untuk membangun image multi-arsitektur, sistem itu benar-benar mencoba menjalankannya pada arsitektur lain, yang berarti hanya mendukung virtualisasi perangkat keras dengan qemu.
  • Saya menggunakan Dagger, dan itu menyelesaikan sebagian besar masalah sebagai upaya kedua dari para pendiri Docker.

    • Anda bisa menulis pipeline dalam bahasa yang sudah Anda gunakan, dan memanfaatkan fitur canggih BuildKit seperti graph layer dan caching tingkat lanjut.