2017-04-12 3 views
6

J'ai un paquet Nix que je voudrais regrouper dans un conteneur docker. En particulier, je veux utiliser Nix comme une alternative plus expressive à un Dockerfile pour avoir des constructions d'image plus rapides (non-linéaires).Comment créer un conteneur docker avec nix?

J'ai trouvé la documentation sur dockerTools.buildImage mais j'aimerais avoir un exemple de travail minimal, et j'aimerais aussi savoir ce qui finit dans le conteneur docker.

Répondre

9

Les paquets exemple suivant (en utilisant contents =) le paquet pkgs.nginx de nixpkgs dans un récipient docker:

docker load --input $(nix-build -E 'with import <nixpkgs> {}; pkgs.dockerTools.buildImage { name = "nix-htop"; contents = pkgs.htop; config = { Cmd = [ "/bin/htop" ]; }; }') 

Vous pouvez ensuite exécuter avec

docker run -it nix-htop 

Le contenu du conteneur sont assez minimes, une seule couche Docker:

docker save nix-htop | tar x --to-stdout --wildcards '*/layer.tar' | tar t --exclude="*/*/*/*" 
./ 
./bin/ 
./bin/htop 
./share/ 
./share/applications/ 
./share/man/ 
./share/pixmaps/ 
nix/ 
nix/store/ 
nix/store/gi5vvbjawzw1bakiksazbd50bvfmpmmc-ncurses-6.0/ 
nix/store/pa5nkrpd5hg5qp1dc4gmbd2vdhn1y3x2-htop-2.0.2/ 
nix/store/vn6fkjnfps37wa82ri4mwszwvnnan6sk-glibc-2.25/ 

Seulement htop et ses dépendances (glibc, ncurses), 26 Mo sur mon cas.