Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dockertools.buildLayeredImage: remove implementation detail layers #75781

Merged

Conversation

grahamc
Copy link
Member

@grahamc grahamc commented Dec 16, 2019

Motivation for this change

Before, every docker image had three extra layers:

  1. A closure layer which is an internal implementation detail of
    calculating the closure of the container
  2. a name-config.json layer which is the images' run-time
    configuration, and has no business being in the image as a layer.
  3. a "bulk-layers" layer which is again an implementation detail
    around collecting the image's closure.

All three of these can be removed, saving precious layers for user software.

Things done
  • Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS linux)
  • Built on platform(s)
    • NixOS
    • macOS
    • other Linux distributions
  • Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
  • Tested compilation of all pkgs that depend on this change using nix-shell -p nix-review --run "nix-review wip"
  • Tested execution of all binary files (usually in ./result/bin/)
  • Determined the impact on package closure size (by running nix path-info -S before and after)
  • Ensured that relevant documentation is up to date
  • Fits CONTRIBUTING.md.
Notify maintainers

cc @

…ayers so it can exclude the top-most level

Before, every docker image had three extra layers:

1. A `closure` layer which is an internal implementation detail of
   calculating the closure of the container
2. a `name-config.json` layer which is the images' run-time
   configuration, and has no business being *in* the image as a layer.
3. a "bulk-layers" layer which is again and implementation detail
   around collecting the image's closure.

None of these layers need to be in the final product.
Without changing behavior, since this code is fiddly, make it possible
to add a filtering step before packaging individual paths.
@grahamc grahamc requested a review from nlewo December 16, 2019 19:14
@grahamc grahamc merged commit 64453c8 into NixOS:master Dec 17, 2019
@grahamc grahamc deleted the dockertools/remove-implementation-detail-layers branch December 17, 2019 21:03
dtzWill pushed a commit to dtzWill/nixpkgs that referenced this pull request Dec 17, 2019
…entation-detail-layers

dockertools.buildLayeredImage: remove implementation detail layers

(cherry picked from commit 64453c8)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant