rokgarbas
- Method 2: Nix language is used to describe (in a declarative way) what the end image should look like. Layers are then calculated based on the dependency tree (or as Nix calls it, dependency closure). The algorithm that creates layers[1] makes sure that there is higher likelihood of cache hits without the user needing to worry about layers, but you can even roll-up your own algorithm that fits your project better.
- Method 3: Using Flox you would get sort of both. An easy way to configure the final docker image via toml configuration and using Method 2 under the hood.
There are other ways how to improve caching efficiency, but those are very use case specific (eg. big "builder" images) and would probably require a completely separate blog post.
[1] https://github.com/NixOS/nixpkgs/blob/63f0da03a3b2c323ea924b...
Would you be willing to give us a challenge in a form of example environment that your data analysts/engineers would use with only a `flox pull`?
https://github.com/NixOS/nixos-homepage/commit/70bcfbb64a0e3...
what i loved about habitat is the supervisor part. i there is a way to use habitat's supervisor with nix. then you get best of both tools.
until then i'll just have to stick to python's supervisord.
and it is actually rather cool since you don't rely on any docker command :)
very common scenario i come across few times a year: you get to work on an old CentOS/RedHat/Fedora box but you need to install latest package X which is only in next version of current distro. which would mean you need to upgrade or do a lot of manual work. with guix/nix you just install it without need to upgrade.
look in documentation at http://nixos.org/nix/ on how to install nix and drop on irc.freenode.org#nixos if having problems