Merge pull request #175474 from hercules-ci/issue-148456-dockerTools-example-etc

dockerTools: Add example of using NixOS' etc

Changed files
+46
nixos
pkgs
build-support
docker
+5
nixos/tests/docker-tools.nix
···
"docker rmi layered-image-with-path",
)
'';
})
···
"docker rmi layered-image-with-path",
)
+
with subtest("etc"):
+
docker.succeed("${examples.etc} | docker load")
+
docker.succeed("docker run --rm etc | grep localhost")
+
docker.succeed("docker image rm etc:latest")
+
'';
})
+41
pkgs/build-support/docker/examples.nix
···
{ pkgs, buildImage, buildLayeredImage, fakeNss, pullImage, shadowSetup, buildImageWithNixDb, pkgsCross }:
rec {
# 1. basic example
bash = buildImage {
···
config.Cmd = [ "hello" ];
includeStorePaths = false;
};
# Example export of the bash image
exportBash = pkgs.dockerTools.exportImage { fromImage = bash; };
···
{ pkgs, buildImage, buildLayeredImage, fakeNss, pullImage, shadowSetup, buildImageWithNixDb, pkgsCross }:
+
let
+
nixosLib = import ../../../nixos/lib {
+
# Experimental features need testing too, but there's no point in warning
+
# about it, so we enable the feature flag.
+
featureFlags.minimalModules = {};
+
};
+
evalMinimalConfig = module: nixosLib.evalModules { modules = [ module ]; };
+
+
in
+
rec {
# 1. basic example
bash = buildImage {
···
config.Cmd = [ "hello" ];
includeStorePaths = false;
};
+
+
etc =
+
let
+
inherit (pkgs) lib;
+
nixosCore = (evalMinimalConfig ({ config, ... }: {
+
imports = [
+
pkgs.pkgsModule
+
../../../nixos/modules/system/etc/etc.nix
+
];
+
environment.etc."some-config-file" = {
+
text = ''
+
127.0.0.1 localhost
+
::1 localhost
+
'';
+
# For executables:
+
# mode = "0755";
+
};
+
}));
+
in pkgs.dockerTools.streamLayeredImage {
+
name = "etc";
+
tag = "latest";
+
enableFakechroot = true;
+
fakeRootCommands = ''
+
mkdir -p /etc
+
${nixosCore.config.system.build.etcActivationCommands}
+
'';
+
config.Cmd = pkgs.writeScript "etc-cmd" ''
+
#!${pkgs.busybox}/bin/sh
+
${pkgs.busybox}/bin/cat /etc/some-config-file
+
'';
+
};
# Example export of the bash image
exportBash = pkgs.dockerTools.exportImage { fromImage = bash; };