[Nix-dev] Question about dockerTools layering

Tobias Pflug tobias.pflug at gmx.net
Sun Sep 25 12:58:55 CEST 2016


I just realised that my initial mail was composed in html - sorry for that x__X

Anyway, I want to quickly expand on my confusion: I don’t understand how to 
reference between the two images.

What I have right now is a derivation that symlinks `assets` and `node_modules` and
I create a docker image which contains just that. Now lets say I split out `node_modules`:

nodeModulesImage = pkgs.dockerTools.buildImage {
  name = “node_modules”;
  contents = [ node_modules ];
  # I guess I need to symlink the node_modules to some absolute path?
};

dockerImage = pkgs.dockerTools.buildImage {
  name = “app-foo”;
  fromImage = nodeModulesImage;
  conents = [ app ];
  config = { … };
};

app = stdenv.mkDerivation {
  …
  installPhase = ‘’
   # how do I reference the node_modules now ?
  ‘';  
};

How exactly should I go about this? How do I reference between those images?
I am still lost ;) Maybe this email makes my problem a bit clearer.

Thanks!

br,
Tobi

> On 23 Sep 2016, at 22:01, Luca Bruno <lethalman88 at gmail.com> wrote:
> 
> Yes, you can create an image with only node_modules and then layer on top of it another image with fromImage.
> 
> You can make the node_modules symlink in the base image. Then only update assets in the upper image.
> 
> On Fri, Sep 23, 2016 at 8:38 PM, Tobias Pflug <Tobias.Pflug at gmx.net> wrote:
> Hi,
>  
> I recently started using dockerTools.buildImage for a nodejs based project. It's working
> fine but I am hitting a mental block trying to introduce layers - I don't want to always push
> around node_modules.
>  
> My current setup is something like the following:
>  
> # default.nix
> dockerImage = with pkgs; dockerTools.buildImage {
>   name = "foo";
>   contents = [ nodejsApp ];
>   config = {
>     Cmd = [ "${nodejs-6_x}/bin/node" "${nodejsApp}/index.js" ];
>     WorkingDir = "${nodejsApp}"
>   };
> };
>  
> # nodejsApp.nix
> stdenv.mkDerivation {
>   name = "nodejsApp";
>   src = ...
>   buildInputs = [ assets nodeModules ];
>   installPhase = ''
>     mkdir -p $out
>     ln -s ${nodeModules}/node_modules $out/node_modules
>     ln -s ${assets} $out/assets
>     ...
>   '';
> }
>  
> So basically I have a derivation for my app and I symlink in the node_modules. Now if I want to avoid pushing
> the node_modules to my docker registry if they are unchanged I would have to create a docker image that contains
> only the node_modules and specify that docker image as `fromImage` argument in my buildImage call I assume?
>  
> I'm just not quite sure to make it all fit together. Maybe someone could help me out a bit?
> Thanks in advance!
>  
> best regards,
> Tobi
> 
> _______________________________________________
> nix-dev mailing list
> nix-dev at lists.science.uu.nl
> http://lists.science.uu.nl/mailman/listinfo/nix-dev
> 
> 
> 
> 
> -- 
> NixOS Linux



More information about the nix-dev mailing list