Nix es mejor que el constructor de imágenes de Docker
- Nix tiene tres facetas: gestor de paquetes, lenguaje y sistema operativo.
- Crear imágenes Docker con Nix tiene ventajas frente al constructor de imágenes de Docker.
- Nix permite conocer de antemano todas las dependencias necesarias en el proceso de compilación y hace posible compilar incluso sin conexión a Internet.
Ventajas de Nix
- Con Nix se pueden crear imágenes Docker de manera más eficiente.
- Nix divide las dependencias en el mínimo de capas Docker posible, reflejando solo los cambios mínimos cuando hay actualizaciones.
- Si varios servicios están en el mismo repositorio, pueden compartir entre sí las capas Docker, lo que mejora la eficiencia.
Ejemplo de un servicio de citas de Douglas Adams
- Se explica el proceso de empaquetar un programa en Go con Nix y convertirlo en una imagen Docker.
- Se puede crear una imagen en capas usando la función
dockerTools.buildLayeredImage.
- Como resultado, se obtiene una imagen de contenedor convencional que puede desplegarse en cualquier lugar.
Opinión de GN⁺
- Usar Nix puede mejorar enormemente la gestión de dependencias y la reproducibilidad de las compilaciones en el proceso de desarrollo de software.
- En comparación con Docker, Nix puede ahorrar tiempo y recursos a largo plazo gracias a la naturaleza determinista de sus compilaciones.
- Sin embargo, los nuevos conceptos y la forma de uso de Nix pueden resultar algo difíciles para principiantes, y puede haber dificultades al integrarlo en pipelines de CI/CD existentes.
- Al adoptar esta tecnología, se necesita capacitación dentro del equipo y un período de adaptación, además de considerar la compatibilidad con la infraestructura existente.
- Otra herramienta con funciones similares a Nix es Guix, que también ofrece gestión de paquetes y compilaciones deterministas.
1 comentarios
Comentarios de Hacker News
He intentado varias veces tomarle cariño a Nix, pero creo que ya es momento de rendirme.
Nix y NixOS están en un estado parecido al de git antes de GitHub.
Pasé 2 o 3 días intentando construir imágenes Docker en Darwin, y este artículo se siente como si se estuviera burlando de mí.
En la entrada del blog falta una explicación de por qué son útiles las capas compartidas de Docker.
La experiencia de construir imágenes Docker para aplicaciones Java con Nix no fue muy agradable.
Es útil si ya adoptaste Nix, y ojalá soluciones de gestión de paquetes más declarativas como Nix o Guix se vuelvan masivas.
Como platform engineer, quiero que me guste Nix, pero no es fácil para todo el mundo.
devbox add python@3.11.Nix no es compatible con upstream hasta el punto de que requiere bastante esfuerzo de empaquetado para la mayoría de las bibliotecas.
Hace poco intenté construir una imagen base de CI con Nix, pero la imagen quedó demasiado grande y algunos trabajos no funcionaban bien por problemas de linking.
Estoy usando Dagger, y resuelve la mayoría de los problemas como un segundo intento de los creadores de Docker.