/ .devops / nix / docker.nix
docker.nix
 1  {
 2    lib,
 3    dockerTools,
 4    buildEnv,
 5    llama-cpp,
 6    interactive ? true,
 7    coreutils,
 8  }:
 9  
10  # A tar that can be fed into `docker load`:
11  #
12  # $ nix build .#llamaPackages.docker
13  # $ docker load < result
14  
15  # For details and variations cf.
16  # - https://nixos.org/manual/nixpkgs/unstable/#ssec-pkgs-dockerTools-buildLayeredImage
17  # - https://discourse.nixos.org/t/a-faster-dockertools-buildimage-prototype/16922
18  # - https://nixery.dev/
19  
20  # Approximate (compressed) sizes, at the time of writing, are:
21  #
22  # .#llamaPackages.docker: 125M;
23  # .#llamaPackagesCuda.docker: 537M;
24  # .#legacyPackages.aarch64-linux.llamaPackagesXavier.docker: 415M.
25  
26  dockerTools.buildLayeredImage {
27    name = llama-cpp.pname;
28    tag = "latest";
29  
30    contents =
31      [ llama-cpp ]
32      ++ lib.optionals interactive [
33        coreutils
34        dockerTools.binSh
35        dockerTools.caCertificates
36      ];
37  }