4 ms·
Using Nix with Dockerfiles
- dan0000 3y agoI think this is something the writer of the article would be delighted to find: https://github.com/railwayapp/nixpacks https://github.com/railwayapp/nixpacks
- bfrog 3y agoI actually used nix in place of dockerfiles to build docker images, as it helped produce a perfectly minimal image for N architectures without much effort.
- rgoulter 3y agoCould you elaborate? How much effort had to go into the Nix expression to make the image smaller, compared to what you'd do with a Dockerfile? I'm guessing you / your team is otherwise already familiar with Nix?
- bfrog 3y agoIt was near effortless, using the nix dockerTools. The hard part was packaging up all the horrible C++ dependencies involved. I followed the guide here https://nixos.org/guides/building-and-running-docker-images.html https://nixos.org/guides/building-and-running-docker-images.... I ended up with an expression that built an image with my program that took the arch as a parameter. You can see it here https://github.com/openenergysolutions/openfmb.adapters/blob/develop/all.nix https://github.com/openenergysolutions/openfmb.adapters/blob... and dig in if you like.
- rgoulter 3y ago> Use a Dockerfile and the official Nix image to build your application using Nix using roughly one shell command. I'd misread the title, & thought this would be about using nixpkgs' dockerTools. https://nix.dev/tutorials/building-and-running-docker-images https://nix.dev/tutorials/building-and-running-docker-images I would assume that the resulting image is about the same, but you wouldn't need a bespoke Dockerfile. The downsides being that you'd need to know nix to maintain it (which you would anyway with this approach), and you'd need `nix` rather than `docker` to build the image.
- 3836293648 3y ago> I'm serious, I haven't had a "works on my machine [but not on others]" issue in years. Not a single one. Clearly you haven't touched OpenGL. Nix apps on non-nixos need a wrapper to use OpenGL and what's worse is that you need a different wrapper for each GPU vendor