dockerTools: optionally preserve directory symlinks
In some cases, this seems to save a lot (>40%) of space.
This commit is contained in:
parent
9f6baaa89a
commit
dce2c258ac
@ -233,6 +233,10 @@ rec {
|
||||
baseJson,
|
||||
# Files to add to the layer.
|
||||
contents ? null,
|
||||
# When copying the contents into the image, preserve symlinks to
|
||||
# directories (see `rsync -K`). Otherwise, transform those symlinks
|
||||
# into directories.
|
||||
keepContentsDirlinks ? false,
|
||||
# Additional commands to run on the layer before it is tar'd up.
|
||||
extraCommands ? ""
|
||||
}:
|
||||
@ -247,7 +251,7 @@ rec {
|
||||
echo "Adding contents..."
|
||||
for item in $contents; do
|
||||
echo "Adding $item"
|
||||
rsync -ak --chown=0:0 $item/ layer/
|
||||
rsync -a${if keepContentsDirlinks then "K" else "k"} --chown=0:0 $item/ layer/
|
||||
done
|
||||
else
|
||||
echo "No contents to add to layer."
|
||||
@ -286,6 +290,10 @@ rec {
|
||||
runAsRoot,
|
||||
# Files to add to the layer. If null, an empty layer will be created.
|
||||
contents ? null,
|
||||
# When copying the contents into the image, preserve symlinks to
|
||||
# directories (see `rsync -K`). Otherwise, transform those symlinks
|
||||
# into directories.
|
||||
keepContentsDirlinks ? false,
|
||||
# JSON containing configuration and metadata for this layer.
|
||||
baseJson,
|
||||
# Existing image onto which to append the new layer.
|
||||
@ -310,7 +318,7 @@ rec {
|
||||
echo "Adding contents..."
|
||||
for item in ${toString contents}; do
|
||||
echo "Adding $item..."
|
||||
rsync -ak --chown=0:0 $item/ layer/
|
||||
rsync -a${if keepContentsDirlinks then "K" else "k"} --chown=0:0 $item/ layer/
|
||||
done
|
||||
'';
|
||||
|
||||
@ -372,6 +380,10 @@ rec {
|
||||
fromImageTag ? null,
|
||||
# Files to put on the image (a nix store path or list of paths).
|
||||
contents ? null,
|
||||
# When copying the contents into the image, preserve symlinks to
|
||||
# directories (see `rsync -K`). Otherwise, transform those symlinks
|
||||
# into directories.
|
||||
keepContentsDirlinks ? false,
|
||||
# Docker config; e.g. what command to run on the container.
|
||||
config ? null,
|
||||
# Optional bash script to run on the files prior to fixturizing the layer.
|
||||
@ -397,11 +409,12 @@ rec {
|
||||
if runAsRoot == null
|
||||
then mkPureLayer {
|
||||
name = baseName;
|
||||
inherit baseJson contents extraCommands;
|
||||
inherit baseJson contents keepContentsDirlinks extraCommands;
|
||||
} else mkRootLayer {
|
||||
name = baseName;
|
||||
inherit baseJson fromImage fromImageName fromImageTag
|
||||
contents runAsRoot diskSize extraCommands;
|
||||
contents keepContentsDirlinks runAsRoot diskSize
|
||||
extraCommands;
|
||||
};
|
||||
result = runCommand "docker-image-${baseName}.tar.gz" {
|
||||
buildInputs = [ jshon pigz coreutils findutils ];
|
||||
|
Loading…
Reference in New Issue
Block a user