&gt; and it didn&#x27;t exist with Docker (because it uses layers)<p>There&#x27;s a big spectrum of &#x27;solving the deduplication problem&#x27; and Docker is towards the &#x27;when all you have is a sledgehammer&#x27; end.<p>Saying &quot;you can manually arrange Dockerfiles so that they cooperate and share layers&quot; is not solving things in an architectual sense! You essentially have to be using a single custom tool (Dockerfiles) to create your images and then you need to apply thinking power to consider how best to arrange your images (e.g. having a &#x27;base&#x27; package.json to install a bunch of things common to many apps, then additional an additional package.json per-app).<p>It&#x27;s getting better with 1.10 (layer content is no longer linked to parent layers, so ADDing the same file in different places should reuse the same layer) but it&#x27;s still pretty imperfect. I created <a href="https:&#x2F;&#x2F;github.com&#x2F;aidanhs&#x2F;dayer" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;aidanhs&#x2F;dayer</a> to demonstrate the ability to extract common files from a set of images and use it as a base layer, which is another improvement. Even better would be a pool of data split with a rolling checksum, like the one bup creates - short of domain-specific improvements (e.g. LTO when compiling C), I think this is probably the best architectural thing you can do.