forked from mirrors/nixpkgs
dockerTools: allow to pass extraCommands, uid and gid to buildLayeredImage
This commit is contained in:
parent
e46ee5e09d
commit
954cda5c9d
|
@ -62,6 +62,7 @@ import ./make-test.nix ({ pkgs, ... }: {
|
|||
# Ensure Layered Docker images work
|
||||
$docker->succeed("docker load --input='${pkgs.dockerTools.examples.layered-image}'");
|
||||
$docker->succeed("docker run --rm ${pkgs.dockerTools.examples.layered-image.imageName}");
|
||||
$docker->succeed("docker run --rm ${pkgs.dockerTools.examples.layered-image.imageName} cat extraCommands");
|
||||
|
||||
# Ensure building an image on top of a layered Docker images work
|
||||
$docker->succeed("docker load --input='${pkgs.dockerTools.examples.layered-on-top}'");
|
||||
|
|
|
@ -316,14 +316,21 @@ rec {
|
|||
# Files to add to the layer.
|
||||
contents,
|
||||
baseJson,
|
||||
extraCommands,
|
||||
uid ? 0, gid ? 0,
|
||||
}:
|
||||
runCommand "${name}-customisation-layer" {
|
||||
buildInputs = [ jshon rsync tarsum ];
|
||||
inherit extraCommands;
|
||||
}
|
||||
''
|
||||
cp -r ${contents}/ ./layer
|
||||
|
||||
if [[ -n $extraCommands ]]; then
|
||||
chmod ug+w layer
|
||||
(cd layer; eval "$extraCommands")
|
||||
fi
|
||||
|
||||
# Tar up the layer and throw it into 'layer.tar'.
|
||||
echo "Packing layer..."
|
||||
mkdir $out
|
||||
|
@ -494,6 +501,8 @@ rec {
|
|||
# Time of creation of the image. Passing "now" will make the
|
||||
# created date be the time of building.
|
||||
created ? "1970-01-01T00:00:01Z",
|
||||
# Optional bash script to run on the files prior to fixturizing the layer.
|
||||
extraCommands ? "", uid ? 0, gid ? 0,
|
||||
# Docker's lowest maximum layer limit is 42-layers for an old
|
||||
# version of the AUFS graph driver. We pick 24 to ensure there is
|
||||
# plenty of room for extension. I believe the actual maximum is
|
||||
|
@ -501,8 +510,6 @@ rec {
|
|||
maxLayers ? 24
|
||||
}:
|
||||
let
|
||||
uid = 0;
|
||||
gid = 0;
|
||||
baseName = baseNameOf name;
|
||||
contentsEnv = symlinkJoin { name = "bulk-layers"; paths = (if builtins.isList contents then contents else [ contents ]); };
|
||||
|
||||
|
@ -531,7 +538,7 @@ rec {
|
|||
name = baseName;
|
||||
contents = contentsEnv;
|
||||
baseJson = configJson;
|
||||
inherit uid gid;
|
||||
inherit uid gid extraCommands;
|
||||
};
|
||||
result = runCommand "docker-image-${baseName}.tar.gz" {
|
||||
buildInputs = [ jshon pigz coreutils findutils jq ];
|
||||
|
|
|
@ -155,6 +155,7 @@ rec {
|
|||
layered-image = pkgs.dockerTools.buildLayeredImage {
|
||||
name = "layered-image";
|
||||
tag = "latest";
|
||||
extraCommands = ''echo "(extraCommand)" > extraCommands'';
|
||||
config.Cmd = [ "${pkgs.hello}/bin/hello" ];
|
||||
contents = [ pkgs.hello pkgs.bash pkgs.coreutils ];
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue